php重载=运算符[重复]

Posted

技术标签:

【中文标题】php重载=运算符[重复]【英文标题】:php overload = operator [duplicate] 【发布时间】:2011-11-12 05:46:49 【问题描述】:

可能重复:Operator Overloading in php

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

所以想要我如下:

class b
    function overloadis()
       // do somethng
    


$a = new b();
$a = 'c';

在上面的例子中,我希望当 $a = 'c';被调用时,首先调用方法重载is,然后该函数决定动作(将'c'分配给$a)是否执行或中止。

这样可以吗?

提前谢谢, 鲍勃

【问题讨论】:

不,那篇文章是关于一个数组的。我找不到普通变量的答案,而不是数组。 我觉得这是一种错误的懒惰。 【参考方案1】:

没有。 PHP 不支持运算符重载,但有一些例外(如 @NikiC 所述:“PHP 支持某些运算符的重载,例如 []、-> 和 (string),还允许重载某些语言结构,例如 foreach”)。

【讨论】:

(有一个 PECL 扩展,但它与不存在一样好 - 自 2006 以来它没有看到任何发展,并且从未退出测试版)跨度> -1 表示“一点也不”。 PHP 支持重载一些运算符,如[]->(string),还允许重载一些语言结构,如foreach @NikiC:哇。我从来没有见过[],无论是提到还是在野外 - 关心链接到一个例子?我真的很好奇。 ArrayAccess 接口允许您为数组 set/get/push/isset/unset 指定自定义操作:php.net/manual/en/class.arrayaccess.php [不寒而栗] PHP 真正具备厨房水槽的一切。【参考方案2】:

您可以通过使用PHP-magic-function __set() 并将相应的属性设置为私有/受保护来模仿类属性的此类功能。

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';

【讨论】:

【参考方案3】:

看看PECL Operator overloading 扩展。

【讨论】:

虽然,正如 Piskvor 上面所说,它是古老的、不受欢迎的,而且不会太有用。 此时,2013年发布了两个测试版,检查一下;) 无法让它与我在 Windows 7 上的本地 64 位 Wamp 一起工作。 那么可能需要适应 64 位代码。

以上是关于php重载=运算符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C ++中重载赋值运算符的返回类型[重复]

在c ++中重载间接运算符[重复]

在 C++ 中重载运算符 < [重复]

在运算符重载(c ++)中对异常使用 throw [重复]

在cpp中重载<<运算符的正确方法是啥[重复]

运算符重载中没有运算符'=='匹配[重复]