关于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は、プロパティへのアクセス、メソッドへのアクセスをコンテキストで判断する

 

    静的遅延束縛を使うと、親クラスから子クラスのメソッドを呼び出すことができる
广告
将在 10 秒后关闭
bannerAds