加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP魔术方法的使用示例

发布时间:2020-12-13 02:41:57 所属栏目:PHP教程 来源:网络整理
导读:《:PHP魔术方法的使用示例》要点: 本文介绍了:PHP魔术方法的使用示例,希望对您有用。如果有疑问,可以联系我们。 PHP实战 ① __get/__set:将工具的属性进行接管 PHP实战 当拜访一个不存在的对象属性时: PHP实战 index.php 代码如下: ?php define('BASE

《:PHP魔术方法的使用示例》要点:
本文介绍了:PHP魔术方法的使用示例,希望对您有用。如果有疑问,可以联系我们。

PHP实战① __get/__set:将工具的属性进行接管

PHP实战当拜访一个不存在的对象属性时:

PHP实战index.php

代码如下:

<?php
define('BASEDIR',__DIR__); //界说根目录常量
include BASEDIR.'/Common/Loader.php';
spl_autoload_register('CommonLoader::autoload');

PHP实战$obj = new CommonObject();?

PHP实战//在php中拜访一个不存在的对象属性时
echo $obj->title;

PHP实战会抛出一个差错:Notice: Undefined property: CommonObject::$title in D:practisephpdesignpsr0index.php on line 9

PHP实战当在Common/Object.php 中添加 __set 和 __get 办法后

PHP实战Object.php

代码如下:

<必修php
namespace Common;

PHP实战class Object{
??? function __set($key,$value){
??? }
???
??? function __get($key){
??? }
}

PHP实战再执行 index.php,不会再报错.

PHP实战再次改动 Common/Object.php

代码如下:

<必修php
namespace Common;

PHP实战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('CommonLoader::autoload');

PHP实战$obj = new CommonObject();?

PHP实战$obj->title = 'hello';
echo $obj->title;

PHP实战执行 index.php,页面输入:

代码如下:

string 'CommonObject::__set' (length=20)
string 'CommonObject::__get' (length=20)
hello

PHP实战② __call/__callStatic:控制 PHP 对象办法的调用(__callStatic 用来控制类的静态办法)

PHP实战当执行一个不存在的php办法时

PHP实战index.php:

代码如下:

<?php
define('BASEDIR',__DIR__); //界说根目录常量
include BASEDIR.'/Common/Loader.php';
spl_autoload_register('CommonLoader::autoload');

PHP实战$obj = new CommonObject();?

PHP实战//当执行一个不存在的php办法时
$obj->test('hello',123);

PHP实战执行 index.php 会报一个致命差错:Fatal error: Call to undefined method CommonObject::test() in D:practisephpdesignpsr0index.php on line 9

PHP实战如果在 Common/Object 中定义一个__call 办法,则会在办法不存在时自动回调:

代码如下:

<?php
namespace Common;

PHP实战class Object{???
??? function __call($func,$param){ //$func 办法名 $param 参数
??????? var_dump($func,$param);
??????? return "magic functionn"; //返回一个字符串作为返回值
??? }
}

PHP实战index.php

代码如下:

<?php
define('BASEDIR',__DIR__); //界说根目录常量
include BASEDIR.'/Common/Loader.php';
spl_autoload_register('CommonLoader::autoload');

PHP实战$obj = new CommonObject();?

PHP实战//当执行一个不存在的php办法时
echo $obj->test('hello',123);

PHP实战页面输入:

代码如下:

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

PHP实战当调用一个不存在的静态办法时

PHP实战Co妹妹on/Object.php

代码如下:

<必修php
namespace Common;

PHP实战class Object{
??? static function __callStatic($name,$arguments) {
??????? var_dump($name,$arguments);
??????? return "magic functionn"; //返回一个字符串作为返回值???????
??? }
}

PHP实战注意:__callStatic 办法也要声明成静态办法

PHP实战index.php

代码如下:

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

PHP实战//执行一个不存在的静态办法
echo CommonObject::test("hello",1234);

PHP实战执行 index.php,页面输入:

代码如下:

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

PHP实战③ __toString:将一个 PHP 工具转换成一个字符串

PHP实战index.php

代码如下:

<?php
define('BASEDIR',__DIR__); //界说根目录常量
include BASEDIR.'/Common/Loader.php';
spl_autoload_register('CommonLoader::autoload');

PHP实战$obj = new CommonObject();

PHP实战echo $obj;

PHP实战此时会报错: Catchable fatal error: Object of class Co妹妹onObject could not be converted to string in D:practisephpdesignpsr0index.php on line 8

PHP实战在 Object.php 中添加 __toString 办法

代码如下:

<必修php
namespace Common;

PHP实战class Object{
??? function __toString() {
??????? return __CLASS__;
??? }
}

PHP实战④ __invoke:将一个 PHP 对象当成一个函数来执行时,会回调此魔术办法

PHP实战index.php

代码如下:

<?php
define('BASEDIR',__DIR__); //界说根目录常量
include BASEDIR.'/Common/Loader.php';
spl_autoload_register('CommonLoader::autoload');

PHP实战$obj = new CommonObject();

PHP实战echo $obj("test");


Object.php
代码如下:

<必修php
namespace Common;

PHP实战class Object{
??? function __invoke($param) {
??????? var_dump($param);
??????? return 'invoke';
??? }
}

PHP实战页面输入:

代码以下:

string 'test' (length=4)
invoke

编程之家培训学院每天发布《:PHP魔术方法的使用示例》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读