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重载=运算符[重复]的主要内容,如果未能解决你的问题,请参考以下文章