개체에서 새 속성을 만들 수 있습니다. 그러나 누군가가 설명 할 수 있습니까? setAttrib
이 두 가지 다른 방식으로 작동하는 이유는 무엇입니까? 왜 그게 ... 기다려 ... 스택 오버플로 !!PHP : 매번 다른 함수 동작 __set
class Test
{
public function setAttrib($key, $value) {
echo "setAttrib\n";
// first time: calls $this->__set($key, $value)
// second time: just sets a public property (but, when exactly was it created?)
$this->$key = $value;
}
public function __set($key, $value) {
echo "__set\n";
$this->setAttrib($key, $value);
}
}
$test = new Test();
$test->setAttrib('hey', 'It works');
var_dump($test);
은 ...
setAttrib
__set
setAttrib
object(Test)#1 (1) {
["hey"]=>
string(8) "It works"
}
편집을 생산 : 내가 대안을 찾는 게 아니에요. 나는 이것이 작동하는 이유를 찾고 있습니다.
아무 것도 변경하지 않지만 __set 메서드는 public이어야합니다 (http://www.php.net/manual/en/language.oop5.overloading.php 참조). "모든 오버로드 메서드 public으로 정의해야합니다. "- 코드를 실행할 때 얻게되는 경고문) –
네가 바로 거기에 있으며 나는 그것을 공개로 바 꾸었습니다. 같은 행동. –
적어도, 그것은 더 이상의 ^^ (내가 다른 것을 바꿀 것이라고는 생각하지 않았기 때문에 나는 단지 코멘트를 올린 것입니다. 그러나 한 가지 경고는 항상 좋은 것입니다) –