ホームページ > バックエンド開発 > PHPチュートリアル > PHP オブジェクト指向の __tostring() と __invoke() の詳細なコード例

PHP オブジェクト指向の __tostring() と __invoke() の詳細なコード例

黄舟
リリース: 2023-03-07 06:28:01
オリジナル
1919 人が閲覧しました

tostring()Magicメソッド

オブジェクトをstringとして使用すると、このメソッドが自動的に呼び出され、このメソッドではオブジェクトを示す特定の文字列を返すことができます。文字列への変換。この魔法の方法は比較的一般的です。
注: このメソッドが定義されていない場合、オブジェクトを文字列として使用することはできません。

クラス内の未定義のtostring()メソッドの例:

<?php
ini_set(&#39;display_errors&#39;, 1);
class A{
    public $name;    
    public $age;   
     public $sex;    
     function construct($name, $age, $sex){
        $this->name = $name;        
        $this->age = $age;        
        $this->sex = $sex;   
    }
}
$obj1 = new A(&#39;张三&#39;, 15, &#39;男&#39;);
echo $obj1;    //echo 后面为字符串,而对象不是字符串,会报错
$v1 = "abc" . $obj1;  //.为字符串连接符,会报错
$v2 = "abx" + $obj1;  //+为加法运算符,会报错?>
ログイン後にコピー

3つのエラー内容は

Catchable fatal error: Object of class A could not be converted to string
Catchable fatal error: Object of class A could not be converted to string
Notice: Object of class A could not be converted to int
ログイン後にコピー

tostring()メソッドがクラスに定義されています

<?php
ini_set(&#39;display_errors&#39;, 1);
class A{
    public $name;    
    public $age;    
    public $sex;    
    function construct($name, $age, $sex){
        $this->name = $name;        
        $this->age = $age;        
        $this->sex = $sex;   
    }    function tostring(){
        $str = "姓名:" . $this->name;   
        $str .= "年龄:" . $this->age;    
        $str .= ",性别:" . $this->sex;        
        return $str;   //这里可以返回“任何字符串内容”

    }
}
$obj1 = new A(&#39;张三&#39;, 15, &#39;男&#39;);
echo $obj1;    //调用tostring(),不会报错?>
ログイン後にコピー

実行結果

姓名:张三年龄:15,性别:男
ログイン後にコピー

invoke()マジックメソッド

このメソッドは、オブジェクトが関数として使用されるときに自動的に呼び出されます。これは一般に推奨されません。

りー

以上がPHP オブジェクト指向の __tostring() と __invoke() の詳細なコード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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