diff --git a/crates/macros/src/impl_.rs b/crates/macros/src/impl_.rs index 7c931dcc7..039122621 100644 --- a/crates/macros/src/impl_.rs +++ b/crates/macros/src/impl_.rs @@ -229,7 +229,7 @@ impl<'a> ParsedImpl<'a> { { // `self_: &[mut] ZendClassObject` // Need to remove arg from argument list - func.args.typed.pop(); + func.args.typed.remove(0); MethodReceiver::ZendClassObject } else { modifiers.insert(MethodModifier::Static); diff --git a/tests/src/integration/class/class.php b/tests/src/integration/class/class.php index 39b97b788..4293c4d64 100644 --- a/tests/src/integration/class/class.php +++ b/tests/src/integration/class/class.php @@ -10,6 +10,8 @@ assert($class->getString() === 'lorem ipsum'); $class->setString('dolor et'); assert($class->getString() === 'dolor et'); +$class->selfRef("foo"); +assert($class->getString() === 'Changed to foo'); assert($class->getNumber() === 2022); $class->setNumber(2023); diff --git a/tests/src/integration/class/mod.rs b/tests/src/integration/class/mod.rs index b84e018f0..753477fdd 100644 --- a/tests/src/integration/class/mod.rs +++ b/tests/src/integration/class/mod.rs @@ -1,5 +1,10 @@ #![allow(clippy::unused_self)] -use ext_php_rs::{convert::IntoZval, prelude::*, types::Zval, zend::ce}; +use ext_php_rs::{ + convert::IntoZval, + prelude::*, + types::{ZendClassObject, Zval}, + zend::ce, +}; /// Doc comment /// Goes here @@ -36,6 +41,14 @@ impl TestClass { pub fn static_call(name: String) -> String { format!("Hello {name}") } + + pub fn self_ref( + self_: &mut ZendClassObject, + val: String, + ) -> &mut ZendClassObject { + self_.string = format!("Changed to {val}"); + self_ + } } #[php_function]