ホームページ > バックエンド開発 > PHPチュートリアル > PHPの__isset()メソッドの詳しい説明

PHPの__isset()メソッドの詳しい説明

藏色散人
リリース: 2023-04-07 06:28:01
オリジナル
15993 人が閲覧しました

アクセスできないプロパティに対して isset() または empty() が呼び出されたときに呼び出される __isset()

このメソッドを説明する前に、isset() のアプリケーションを見てみましょう。 ) 関数 isset() は、変数が設定されているかどうかを判定する関数です。変数はパラメータとして渡されます。渡された変数が存在する場合は true が返され、そうでない場合は false が返されます。

では、オブジェクトの外部で isset() 関数を使用して、オブジェクト内のメンバーが設定されているかどうかを判断する場合、それを使用できるでしょうか。

状況は 2 つあります。オブジェクト内のメンバーがパブリックである場合、この関数を使用してメンバー属性を測定できます。メンバーがプライベートなメンバー属性である場合、この関数は機能しません。その理由は、オブジェクト内のメンバーがパブリックである場合、この関数は機能しません。 private. カプセル化されており、外部からは見えません。では、オブジェクトの外部で isset() 関数を使用して、プライベート メンバー属性が設定されているかどうかを判断することはできないのでしょうか。もちろんそれは可能ですが、確実ではありません。

__isset() メソッドをクラスに追加するだけで済みます。オブジェクト内のプライベート メンバーが設定されているかどうかを判断するために isset() 関数がクラスの外部で使用されると、クラスが自動的に呼び出されます。内部の __isset() メソッドは、そのような操作を完了するのに役立ちます。

__isset() の役割:

アクセスできないプロパティに対して isset() または empty() が呼び出される場合、__isset() が呼び出されます。

次のコード デモを参照してください:

<?php
class Person
{
    public $sex;
    private $name;
    private $age;
    public function __construct($name="",  $age=25, $sex=&#39;男&#39;)
    {
        $this->name = $name;
        $this->age  = $age;
        $this->sex  = $sex;
    }
    /**
     * @param $content
     *
     * @return bool
     */
    public function __isset($content) {
        echo "当在类外部使用isset()函数测定私有成员{$content}时,自动调用<br>";
        echo  isset($this->$content);
    }
}
$person = new Person("小明", 25); // 初始赋值
echo isset($person->sex),"<br>";
echo isset($person->name),"<br>";
echo isset($person->age),"<br>";
ログイン後にコピー

実行結果は次のとおりです:

1 // public 可以 isset()
当在类外部使用isset()函数测定私有成员name时,自动调用 // __isset() 内 第一个echo
1 // __isset() 内第二个echo
当在类外部使用isset()函数测定私有成员age时,自动调用 // __isset() 内 第一个echo
1 // __isset() 内第二个echo
ログイン後にコピー

以上がPHPの__isset()メソッドの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート