亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PHP魔術方法的使用示例

2024-05-04 23:36:46
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP魔術方法的使用示例,本文分別講解了__get、__set、__call、__callStatic、__toString、 __invoke等魔術方法的使用,需要的朋友可以參考下
 

① __get/__set:將對象的屬性進行接管

當訪問一個不存在的對象屬性時:

index.php

復制代碼代碼如下:

<?php
define('BASEDIR',__DIR__); //定義根目錄常量
include BASEDIR.'/Common/Loader.php';
spl_autoload_register('//Common//Loader::autoload');

 

$obj = new /Common/Object(); 

//在php中訪問一個不存在的對象屬性時
echo $obj->title;

 

會拋出一個錯誤:Notice: Undefined property: Common/Object::$title in D:/practise/php/design/psr0/index.php on line 9

當在Common/Object.php 中添加 __set 和 __get 方法后

Object.php

復制代碼代碼如下:

<?php
namespace Common;

 

class Object{
    function __set($key,$value){
    }
    
    function __get($key){
    }
}

 

再執行 index.php,不會再報錯。

再次修改 Common/Object.php

復制代碼代碼如下:

<?php
namespace Common;

 

class Object{
    protected $array = array();
    
    function __set($key,$value){
        var_dump(__METHOD__);
        $this->array[$key] = $value;
    }
    
    function __get($key){
        var_dump(__METHOD__);
        return $this->array[$key];
    }
}


index.php
復制代碼代碼如下:

<?php
define('BASEDIR',__DIR__); //定義根目錄常量
include BASEDIR.'/Common/Loader.php';
spl_autoload_register('//Common//Loader::autoload');

 

$obj = new /Common/Object(); 

$obj->title = 'hello';
echo $obj->title;

 

執行 index.php,頁面輸出:

復制代碼代碼如下:

string 'Common/Object::__set' (length=20)
string 'Common/Object::__get' (length=20)
hello

 

② __call/__callStatic:控制 PHP 對象方法的調用(__callStatic 用來控制類的靜態方法)

當執行一個不存在的php方法時

index.php:

復制代碼代碼如下:

<?php
define('BASEDIR',__DIR__); //定義根目錄常量
include BASEDIR.'/Common/Loader.php';
spl_autoload_register('//Common//Loader::autoload');

 

$obj = new /Common/Object(); 

//當執行一個不存在的php方法時
$obj->test('hello',123);

 

執行 index.php 會報一個致命錯誤:Fatal error: Call to undefined method Common/Object::test() in D:/practise/php/design/psr0/index.php on line 9

如果在 Common/Object 中定義一個__call 方法,則會在方法不存在時自動回調:

復制代碼代碼如下:

<?php
namespace Common;

 

class Object{    
    function __call($func, $param){ //$func 方法名 $param 參數
        var_dump($func, $param);
        return "magic function/n"; //返回一個字符串作為返回值
    }
}

 

index.php

 

復制代碼代碼如下:

<?php
define('BASEDIR',__DIR__); //定義根目錄常量
include BASEDIR.'/Common/Loader.php';
spl_autoload_register('//Common//Loader::autoload');

 

$obj = new /Common/Object(); 

//當執行一個不存在的php方法時
echo $obj->test('hello',123);

 

頁面輸出:

復制代碼代碼如下:

string 'test' (length=4)
array
  0 => string 'hello' (length=5)
  1 => int 123
magic function

 

當調用一個不存在的靜態方法時

Common/Object.php

 

復制代碼代碼如下:

<?php
namespace Common;

 

class Object{
    static function __callStatic($name, $arguments) {
        var_dump($name, $arguments);
        return "magic function/n"; //返回一個字符串作為返回值        
    }
}

 

注意:__callStatic 方法也要聲明成靜態方法

index.php

復制代碼代碼如下:

<?php
define('BASEDIR',__DIR__); //定義根目錄常量
include BASEDIR.'/Common/Loader.php';
spl_autoload_register('//Common//Loader::autoload');

 

//執行一個不存在的靜態方法
echo Common/Object::test("hello",1234);

 

執行 index.php ,頁面輸出:

復制代碼代碼如下:

string 'test' (length=4)
array
  0 => string 'hello' (length=5)
  1 => int 1234
magic function

 

③ __toString:將一個 PHP 對象轉換成一個字符串

index.php

復制代碼代碼如下:

<?php
define('BASEDIR',__DIR__); //定義根目錄常量
include BASEDIR.'/Common/Loader.php';
spl_autoload_register('//Common//Loader::autoload');

 

$obj = new /Common/Object();

echo $obj;

 

此時會報錯: Catchable fatal error: Object of class Common/Object could not be converted to string in D:/practise/php/design/psr0/index.php on line 8

在 Object.php 中添加 __toString 方法

復制代碼代碼如下:

<?php
namespace Common;

 

class Object{
    function __toString() {
        return __CLASS__;
    }
}

 

④ __invoke:將一個 PHP 對象當成一個函數來執行時,會回調此魔術方法

index.php

復制代碼代碼如下:

<?php
define('BASEDIR',__DIR__); //定義根目錄常量
include BASEDIR.'/Common/Loader.php';
spl_autoload_register('//Common//Loader::autoload');

 

$obj = new /Common/Object();

echo $obj("test");


Object.php
復制代碼代碼如下:

<?php
namespace Common;

 

class Object{
    function __invoke($param) {
        var_dump($param);
        return 'invoke';
    }
}

 

頁面輸出:

復制代碼代碼如下:

string 'test' (length=4)
invoke

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97精品国产97久久久久久免费| 91精品久久久久久久久久久久久| 91美女片黄在线观看游戏| 久久久成人av| 成人激情视频在线播放| 亚洲最大中文字幕| 久久久这里只有精品视频| 欧美日韩免费网站| 亚洲成人激情在线观看| 国产精品黄视频| 爽爽爽爽爽爽爽成人免费观看| 欧美成人在线免费视频| 91沈先生在线观看| 亚洲va电影大全| 欧美国产精品va在线观看| 啊v视频在线一区二区三区| 福利一区福利二区微拍刺激| 亚洲性视频网址| 亚洲国产精品人久久电影| 亚洲精品国精品久久99热一| 亚洲人成亚洲人成在线观看| 国产精品极品美女粉嫩高清在线| www国产亚洲精品久久网站| 日韩免费看的电影电视剧大全| 91人成网站www| 日韩av一区在线观看| 91国产精品视频在线| 久久亚洲综合国产精品99麻豆精品福利| 91高清免费在线观看| 91精品国产91久久久久久吃药| 欧美中在线观看| 91亚洲精品久久久久久久久久久久| 一区二区三区回区在观看免费视频| 激情久久av一区av二区av三区| 丰满岳妇乱一区二区三区| 国产91在线高潮白浆在线观看| 久久久国产精品x99av| 日韩av网址在线| 欧美另类第一页| 欧美黄色免费网站| 91精品国产91久久久久久| 国产精品www| 91在线观看免费网站| 在线日韩av观看| 国产精品亚洲аv天堂网| 国产精品视频一区二区高潮| 欧美激情精品在线| 欧美有码在线视频| 日韩精品久久久久久久玫瑰园| 国产精品高精视频免费| 欧美成人久久久| 午夜精品久久久99热福利| www.99久久热国产日韩欧美.com| 欧美综合一区第一页| 久久这里只有精品视频首页| 亚洲精品一区二三区不卡| 欧美性色视频在线| 成人自拍性视频| 欧美精品生活片| 欧美午夜精品久久久久久人妖| 欧美日韩国产va另类| 中文综合在线观看| 亚洲男人天堂网站| 久久久成人精品| 国产精品一区二区三区久久| 日韩中文字幕在线看| 亚洲另类欧美自拍| 亚洲理论电影网| 久久久亚洲国产天美传媒修理工| 日韩av一区二区在线观看| 精品国产乱码久久久久酒店| 国产精品久久久999| 久久国产加勒比精品无码| 在线电影av不卡网址| 都市激情亚洲色图| 日韩中文字幕久久| 日本不卡视频在线播放| 日本在线观看天堂男亚洲| 欧美精品福利视频| 日韩欧美精品网址| 97超级碰碰碰久久久| 欧美日韩高清区| 成人国产精品免费视频| 精品国产网站地址| 欧美专区在线视频| 国产成人福利网站| 国产精品午夜一区二区欲梦| 91热精品视频| 精品国产一区二区三区久久狼5月| 最近免费中文字幕视频2019| 97在线观看视频| 欧美一级成年大片在线观看| 91精品视频免费看| 色噜噜国产精品视频一区二区| 中文字幕亚洲色图| 日韩av电影手机在线| 青青青国产精品一区二区| 国产成人精品电影久久久| 国产成人一区二区三区小说| 丝袜美腿精品国产二区| 成人乱色短篇合集| 亚洲精品电影久久久| 久久天天躁日日躁| 久久综合色影院| 青青草原成人在线视频| 欧美视频免费在线| 久99久在线视频| 亚洲xxx自由成熟| 久久久久久亚洲| 黑人巨大精品欧美一区二区一视频| 欧美亚洲视频在线观看| www.久久久久久.com| 久久久久久亚洲精品中文字幕| 日韩精品久久久久久久玫瑰园| 亚洲在线免费观看| 国产精品综合网站| 成人激情视频免费在线| 中文字幕在线看视频国产欧美| 日韩中文字幕国产精品| 国产精品久久久久久久久久99| 日韩a**中文字幕| 久久网福利资源网站| 日韩在线观看av| 亚洲欧美综合精品久久成人| 欧美亚洲第一区| 欧美韩国理论所午夜片917电影| 久久久久久久久爱| 欧美激情中文字幕乱码免费| 狠狠躁夜夜躁人人躁婷婷91| 亚洲黄色免费三级| 亚洲第一福利网| 91夜夜未满十八勿入爽爽影院| 国产精品久久久久aaaa九色| 国产精品成人aaaaa网站| 自拍视频国产精品| 国产成人久久精品| 欧美极品少妇xxxxⅹ裸体艺术| 青草青草久热精品视频在线观看| 最近中文字幕日韩精品| 91av在线免费观看| 国产精品久久一区| 亚洲综合成人婷婷小说| 亚洲精品福利在线观看| 午夜精品一区二区三区在线视频| 久久综合久中文字幕青草| 欧美裸体男粗大视频在线观看| 人九九综合九九宗合| 精品色蜜蜜精品视频在线观看| 国产综合在线视频| 日韩在线观看免费高清| 国产精品成人品| 国产精品久久久久久久久久新婚| 亚洲美女又黄又爽在线观看| 热久久这里只有| 91视频-88av| 人九九综合九九宗合| 欧美日韩在线视频一区二区| 欧美在线影院在线视频| 久久久91精品国产一区不卡| 午夜免费久久久久| 91精品国产91久久久久| 欧美精品一区在线播放| 97av在线视频| 亚洲高清久久网|