Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php重载=运算符_Php_Oop_Operator Overloading_Overloading - Fatal编程技术网

php重载=运算符

php重载=运算符,php,oop,operator-overloading,overloading,Php,Oop,Operator Overloading,Overloading,可能重复: 有没有办法使=运算符过载 所以我想要的是: class b{ function overloadis(){ // do somethng } } $a = new b(); $a = 'c'; 在上面的例子中,当$a='c'时,我想要它;调用时,首先调用方法重载,然后在执行或中止操作(将“c”分配给$a)时终止该函数 有可能这样做吗 Thnx提前, Bob否。PHP不支持运算符重载,只有少数例外(如@NikiC所述:“PHP支持某些运算符的重载,如

可能重复:

有没有办法使=运算符过载

所以我想要的是:

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

$a = new b();
$a = 'c';
在上面的例子中,当$a='c'时,我想要它;调用时,首先调用方法重载,然后在执行或中止操作(将“c”分配给$a)时终止该函数

有可能这样做吗

Thnx提前,
Bob

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

您可以模拟类属性的此类功能,通过使用和将各自的属性设置为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';

看一下扩展。

不,那篇文章是关于数组的。我找不到一个正态变量的答案,而不是数组。这让我觉得是一种错误的懒惰类型(有一个PECL扩展,但它几乎不存在——它自2006年以来没有任何发展,也从未脱离beta测试版)——1表示“一点也不”。PHP支持重载一些运算符,如
[]
->
(string)
,还允许重载一些语言构造,如
foreach
@NikiC:Whoa。对于
[]
,我从来没有见过这样的例子,无论是在提到还是在野生环境中,我都没有看到过链接到一个例子的链接?我真的很好奇。
ArrayAccess
界面允许您为数组set/get/push/isset/unset:[颤栗]指定自定义操作。PHP真的拥有一点东西和厨房水槽。尽管如Piskvor所述,它是古老的、不受欢迎的,不会太有用,2013年发布了两个Beta,请检查;)无法使其在Windows 7上与我的本地64位Wamp一起工作。可能需要适应64位代码。