返回值 __set() 是 ignore &__get() 在链接赋值中从不调用是什么意思?



我是OOP PHP的新手,并从php.net学习。该页面上有一个 note (http://php.net/manual/enual/en/language.oop5.obleloading.php#language.oop5.overloading.members),其中说:

__set()的返回值由于PHP处理分配运算符的方式而被忽略。同样,当这样将作业链接在一起时,__get()从未被调用: $ a = $ obj-> b = 8;

这让我很困惑。谁能告诉__set()和__get()魔法方法中的本注释是什么?

for语句

$a = $obj->b = 8;

如果$ obj-> b使用 __ set 或使用 __ __ get 检索,则不会将分配的值与$ a。/p>

但是,如果$ obj-> b是 public 属性,并且正在直接分配,则该陈述将按预期行事,$ a将分配与属性$ b相同的值。<<<<<<<<<<<</p>

多次,如果您将几个变量初始化为相同的值,则可以选择这样的代码:

$i = $j = 0;

注释让您知道,如果您使用的是 __ set __ get

__ SET __ get 在开销上产生。在大多数时间属性中,都会设置和检索明确的设置并获得功能,例如:

public function setB($b) {
   $this->b = $b;
   return $this;
}
public function getB() {
   return $this->b;
}

代码比较几种方法:

<?php
// Magic methods to access private properties
Class A {
    private $properties = [];
    public function __set($key,$value) {
        $this->properties[$key] = $value;
    }
    public function __get($key) {
        return isset($this->properties[$key]) ? $this->properties[$key] : null;
    }
}
// Direct access to a public property
Class B {
    public $b;
}
// Set/get access to a private property
// This is the most common approach
Class C {
    private $b;
    public function setB($b) {
        $this->b = $b;
    }
    public function getB() {
        return $this->b;
    }
}
$a = new A();
$c = $a->b = 8;
var_dump($a,$c);
$b = new B();
$c = $b->b = 8;
var_dump($b,$c);
$c = new C();
$c->setB(8);
$d = $c->getB();
var_dump($c,$d);

属性超载仅在对象上下文中起作用。这些魔术方法不会在静态上下文中触发。因此,这些方法不应被声明为静态。截至5.3.0 php 5.3.0,如果一种魔术超载方法被声明为静态,则会发出警告 http://php.net/manual/en/language.oop5.obloading.php#object.set

静态方法http://de2.php.net/manual/en/language.oop.oop5.static.php 由于静态方法是无需创建对象的实例而可调用的,因此伪变量$这是在称为静态的方法中不可用的。 注意:在PHP 5中,调用非静态方法静态生成E_strict级别警告。 警告:在PHP 7中,静态调用非静态方法,并将生成E_DEPRECET的警告。将来可以静态地删除对非静态方法调用非静态方法的支持。

http://de2.php.net/manual/en/language.oop5.static.php

您可以理解对象和amp之间的区别;链接的静态上下文以及PHP为什么要警告。

此链接将为您提供相同问题的答案https://softwareengineering.stackexchange.com/questions/questions/140679/why-is-is-there-there-there-there-no-facility-to-overload-to-overload-patic-properties-in-php

此外

最新更新