Thanks for the early feedback.

Yes, that was one of the first things that broke, so I came up with this:

if (invariant_fn) {
        zval retval;
        zval obj_zval, function_name;
        ZVAL_OBJ(&obj_zval, obj);
        ZVAL_STRING(&function_name, "__invariant");

        // Temporarily restore original zend_execute_ex to prevent infinite
recursion
        zend_execute_ex = original_zend_execute_ex;

        if (call_user_function(CG(function_table),
                               &obj_zval,
                               &function_name,
                               &retval,
                               0, NULL) == SUCCESS)
        {
            zval_ptr_dtor(&retval);
        }

        // Restore our custom execution hook
        zend_execute_ex = invariant_execute_ex;
        zval_ptr_dtor(&function_name);
    }

I hope this sparks interest.

Best,
Andrea

On Wed, 19 Mar 2025 at 22:24, Yehuda Katz <yeh...@ymkatz.net> wrote:

> This looks really interesting. Does it make sure that there is not a loop
> by calling another class method from inside the invariant check?
>
> - Y
>
> Sent from a device with a very small keyboard and hyperactive autocorrect.
>
> On Wed, Mar 19, 2025, 4:58 PM Andrea M <and.manc...@googlemail.com> wrote:
>
>> Hi everyone,
>>
>> I started my journey as a LAMP developer back in 2004, working with PHP 4
>> and MySQL 3. For years, PHP was my daily driver, but toward the end of
>> 2011, I transitioned to JavaScript, gradually writing less and less
>> PHP—until it became just an occasional tool in my stack.
>>
>> That changed with *beyond-tabs.com <http://beyond-tabs.com>*. Through
>> this project, I found myself re-embracing PHP, and, thanks to this
>> community, I also discovered *Design by Contract (DbC)*—a paradigm that
>> immediately resonated with me. Now, I want to take the next step and author
>> my very first PHP extension: *Invariant PHP
>> <https://github.com/andreamancuso/invariant-php>*, bringing DbC
>> principles to the language.
>>
>> Beyond just being an extension, I see this as a *proof of concept*—a way
>> to demonstrate the value of DbC in PHP and potentially spark a conversation
>> about native support in future PHP versions. I’m eager to learn from this
>> group, get feedback, and hopefully contribute something meaningful to the
>> ecosystem.
>>
>> Looking forward to your guidance and insights!
>>
>> Best,
>> Andrea
>>
>

Reply via email to