我正在转换PHP 5.3库以在PHP 5.2上工作.支持我的主要方法是使用后期静态绑定return new static($options);,如果我将其转换为return new self($options)将得到相同的结果?
new self和之间有什么区别new static?
我如何从同一个类中的另一个方法调用静态方法?
$this->staticMethod();
Run Code Online (Sandbox Code Playgroud)
要么
$this::staticMethod();
Run Code Online (Sandbox Code Playgroud) 我从未见过像这样的代码:
public static function getInstance()
{
if ( ! isset(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
Run Code Online (Sandbox Code Playgroud)
它是一样的new className()吗?
编辑
如果该类是继承的,它指向哪个类?
我对这段代码中显示的情况感到有点困惑......
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.
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我需要使用$this->push_back(new SomeClass($file, $dtype))或 self::push_back(new SomeClass($file, $dtype))调用成员函数push_back?我似乎无法push_back(new SomeClass($file, $dtype))像我期望的那样访问它.我读过什么时候使用自我超过$ this?但它没有回答为什么我需要其中一个(或者如果我一直这样做,也许我搞砸了别的东西).
当成员是非静态成员并且在同一个类中时,为什么需要此规范?不应该从同一个类中的其他成员函数中看到并知道所有成员函数吗?
PS:它可以很好地工作$this->,self::但是当电话中没有这些功能时,这些功能都是未知的push_back.
我有这个代码:
class a(){
function b(){
if(isset($this){
echo 'instance! ';
echo get_class($this);
}else{
echo 'static';
}
}
}
class C{
public function test(){
a::b();
}
}
$CC=new C;
$CC->test();
Run Code Online (Sandbox Code Playgroud)
这将是回声
实例C.
将某些对象分配给静态属性是非法的吗?
我在下面的代码中收到HTTP 500错误.
require_once('class.linkedlist.php');
class SinglyLinkedlistTester {
public static $ll = new Linklist();
}
Run Code Online (Sandbox Code Playgroud)
HTTP错误500(内部服务器错误):服务器尝试完成请求时遇到意外情况.
注意:非对象如string,int赋值给静态变量没有问题.举个例子,
public static $ll = 5; //no issue
Run Code Online (Sandbox Code Playgroud)
class.linkedlist.php中也没有代码问题.
private function GetProjects($ProjectStatus) {
return \App\Models\Project\Project_Model
::where('ProjectStatusID', $ProjectStatus)
->where('WhoCreatedTheProject', auth()->user()->UserID)->get();
}
Run Code Online (Sandbox Code Playgroud)
public function ClientCancelledProjects() {
$ProjectStatus = \App\Enumeration\Project\ProjectStatus::Cancelled;
$MyProjects = GetProjects($ProjectStatus);
return view("Project.Client.MyProject", array("Projects" => $MyProjects));
}
Run Code Online (Sandbox Code Playgroud)
调用未定义的函数App\Http\Controllers\Project\GetProjects()
有人知道为什么会这样吗?我试图重用一些代码行,因为它们在Controller中被多次写入.
我了解到静态比self更好,因为 self 进行后期静态绑定。
但我想知道哪个最适合引用const变量。
class Black
{
const color = 'black';
public function byThis()
{
return $this::color;
}
public function bySelf()
{
return self::color;
}
public function byStatic()
{
return static::color;
}
}
Run Code Online (Sandbox Code Playgroud)
我检查了所有三个吸气剂都运行良好。哪个是最好的选择?(我使用 PHP 7.0)