关于PHP类的内容
首先
我叫藤井,是日本系统开发株式会社的员工。根据标题,我总结了关于类的内容。该文章涉及PHP类的相关知识,讲解了什么是类等内容。
关于对象
在中文中,对象可以像其他语言的引用一样处理。
执行$obj = new StdClass()时,$obj的ID将被赋值为对象的ID。
如果将$obj赋值给其他变量,则对象的ID将被复制。
由于$obj被赋值为对象的ID,因此即使再次赋值为null,对象也不会消失。(与其他语言的引用相同)
<?php
$obj = new StdClass();
var_dump($obj);
$obj2 = $obj;
$obj = null;
var_dump($obj2);
调用赋值给属性的匿名函数。
PHP根据上下文来判断对属性和方法的访问。带有“()”的调用会被判断为方法访问,否则为属性访问。
因此,如果将匿名函数赋值给属性,就无法直接调用它(需要先赋值给变量)。
可以通过($obj->closure)()的方式调用将匿名函数分配给属性的一行代码,在访问属性后进行调用。
<?php
$obj = new StdClass();
$obj->closure = function() {echo "hello";};
($obj->closure)();
静态延迟限制
使用静态延迟绑定需要使用「static关键字」和「作用域分配符」。
使用静态延迟绑定可以从父类调用子类的方法。
<?php
class Hoge {
public static function func1() {
static::func2();
}
}
class Huga extends Hoge {
public static function func2() {
echo "Huga::func2" . PHP_EOL;
}
}
Huga::func1();
静态关键字解决的是最近的非转发调用(除转发调用外)。
转发调用是指使用“self”、“parent”、“static”进行调用。
在上述示例中,对于static::func2();来说,Huga::func1();是最近的非转发调用,因此static解析为Huga。
只需要一个选项来用中文转述以下句子:总结
-
- オブジェクトをインスタンス化すると、変数にはオブジェクトのIDが代入される
-
- PHPは、プロパティへのアクセス、メソッドへのアクセスをコンテキストで判断する
- 静的遅延束縛を使うと、親クラスから子クラスのメソッドを呼び出すことができる