PHP에 따르면, 클래스 :: 자기는 항상 클래스 자체를 가리키는,하지만 난이 코드를 쓴, 이상한 일이 발생합니다'자체'는 상속 된 클래스에서 정확히 어떻게 작동합니까?
foo() from C_foo
foo() from C_bar
:
class C_foo{
function foo() { return "foo() from C_foo"; }
function bar() { echo self::foo(); }
}
class C_bar extends C_foo{
function foo() { return "foo() from C_bar"; }
}
C_foo::bar();
C_bar::bar();
내가 출력이되었을 것이라고 생각
는하지만 사실 :
foo() from C_foo
foo() from C_foo
는 부모 클래스의 자기 정확히으로 상속되지 않음을 의미 자식,이 더 작동합니다 :
foo() {return parent::foo();}
그 기능은 PHP 또는 버그입니까? 아니면 이런 뜻일까요? 나는 클래스 자체에서 개체를 만드는 이야기하려고 노력으로
그렇지 않으면 같은 일이 발생되면, 코드는 다음과 같은 것입니다 :
class Models {
function find($exp) {
...
...
$temp_model = new self();
...
...
}
}
class Something extends Models {...}
$somethings = Something::find("...");
어쩌면 당신이 변수를 설정하지 않는 이유 "물어 보곤 사람 클래스의 값을 사용하고 변수를 __construction 함수로 사용합니까? " 이처럼
:
...
...
function find($exp) {
...
...
$class_name = __class__;
$temp_model = new $class_name();
...
...
}
...
는 사실 그했다, 그리고 더 이상한 결과를 얻었다 : 클래스가 어떤 속성이나 기능을하지만 find()
, 또는이없는 경우에만 작동
을 함수가 존재할 수있는 곳에서 변수가 표시된다는 오류가 튀어 나옵니다.
덕분에 많이 나는 공장 패턴 : –