php overload = operator

Bob*_*Bob 10 php oop overloading operator-overloading

可能重复:
PHP中的运算符重载

有没有办法重载=运算符?

所以我想要的是以下内容:

class b{
    function overloadis(){
       // do somethng
    }
}

$a = new b();
$a = 'c';
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我希望当$ a ='c'时; 调用方法,首先调用方法overloadis然后该函数决定是否执行或中止操作(将'c'赋值给$ a).

是否有可能做到这一点 ?

Thnx提前,鲍勃

Pis*_*3.0 11

不.PHP不支持运算符重载,但有一些例外(如@NikiC所述:"PHP支持重载某些运算符,如[], - >和(字符串),并允许重载某些语言结构,如foreach") .

  • (有一个PECL扩展,但它就像不存在一样好 - 它自**2006**以来从未见过任何发展,并且从未退出测试版) (2认同)
  • -1表示"根本没有".PHP支持重载一些运算符,如`[]`,` - >`和`(string)`,并允许重载一些语言结构,如`foreach`. (2认同)

fee*_*ela 5

您可以通过使用PHP-magic-function__set()并将相应属性设置为private/protected来为类属性模仿此类功能.

class MyClass
{
    private $a;

    public function __set($classProperty, $value)
    {
        if($classProperty == 'a')
        {
            // your overloadis()-logic here, e.g.
            // if($value instanceof SomeOtherClass)
            //     $this->$classProperty = $value;
        }
    }
}

$myClassInstance = new MyClass();
$myClassInstance->a = new SomeOtherClass();
$myClassInstance->a = 'c';
Run Code Online (Sandbox Code Playgroud)