我对此代码中显示的情况感到有点困惑......
class DirEnt
{
public function PopulateDirectory($path)
{
/*... code ...*/
while ($file = readdir($folder))
{
is_dir($file) ? $dtype = DType::Folder : $dtype = Dtype::File;
$this->push_back(new SomeClass($file, $dtype));
}
/*... code ...*/
}
//Element inserter.
public function push_back($element)
{
//Insert the element.
}
}
为什么我需要使用$this->push_back(new SomeClass($file, $dtype))
或self::push_back(new SomeClass($file, $dtype))
来调用成员函数push_back
?我似乎无法通过像我期望的那样push_back(new SomeClass($file, $dtype))
来访问它。我读了When to use self over $this?,但它没有回答为什么我需要其中一个(或者如果我一直这样做,也许我搞砸了别的东西)。
当成员既是非静态成员又是同一个类时,为什么需要此规范?是不是所有成员函数都可以从同一个类中的其他成员函数中看到和知道?
PS:它适用于$this->
和self::
,但在push_back
来电时不存在未知功能。
答案 0 :(得分:8)
$this->push_back
将该方法作为CURRENT对象的一部分进行调用。
self::push_back
将该方法称为静态,这意味着您无法在push_back中使用$this
。
push_back()
本身将尝试从全局范围调用推回函数,而不是对象中的push_back。它不是一个“对象调用”,它只是一个普通的函数调用,就像在对象中调用printf
或is_readable()
调用通常的核心PHP函数一样。
答案 1 :(得分:6)
我似乎无法像我期望的那样
push_back(new SomeClass($file, $dtype))
来访问它。
这样您就可以将push_back()
作为函数调用。围绕$this
(对象方法)或self::
/ static::
(对于类方法)没有办法,因为它会导致歧义
请记住:PHP不是Java;)
答案 2 :(得分:0)
您可以这样访问
public static function abc($process_id){
return 1;
}
public static function xyz(){
$myflag=self::abc();
return $myflag;
}
output : 1