面向对象 魔术方法 __clone() __toString() __call() __autoload()
2017-09-28 16:00
218 查看
__clone() 在克隆对象时被自动调用
<?php header("Content-Type: text/html; charset=utf-8"); class demo{ public $name; public $age; public function __construct($name,$age){ $this -> name = $name; $this -> age = $age; } public function say(){ echo 'say'; } /* * 魔术方法 * __clone() 在克隆对象时被自动调用 * 作用:在对新对象的成员属性进行修改 */ public function __clone(){ $this -> name = '罗宾'; $this -> age = 20; } } $demo = new demo('娜美',18); $demo -> say(); $demo1 = clone $demo; echo "<hr/>"; $demo1 -> say(); echo "<br/>"; var_dump($demo1);
__toString() 直接 echo 或 print 对象时被自动调用
class box{ public $name; public function __construct($name){ $this -> name = $name; } /* * 魔术方法 * __toString() 直接 echo 或 print 对象时被自动调用 * 作用:可以直接返回字符串或用于调用流程处理 * */ public function __toString(){ $this -> d(); return '自动调用....'; } private function d(){ echo 'd.....'; } } $box = new box('娜美'); echo $box;
__call() 在调用一个不存在的方法时被自动调用
class happy{ private $sql = array( 'table'=>'', 'field'=>'*', 'where'=>'', 'order'=>'', 'limit'=>'' ); /* * 魔术方法 * __call() 在调用一个不存在的方法士被自动调用 * 参数1:调用的方法名 * 参数2:调用方法时传递的参数列表(数组) */ /*public function __call($methodName,$args){ echo "调用方法{$methodName}(),参数:"; print_r($args); echo "不存在"; }*/ public function __call($methodName,$args){ /*判断数组内有没有这个下标*/ /*为了处理方法由客户传过来没有定义需要进行判断处理*/ if (array_key_exists($methodName, $this->sql)) { /*如果是 就进行赋值操作*/ $this -> sql[$methodName] = $args[0]; } else { /*如果不是 就给出提示信息*/ die("你调用的方法{$methodName}()不存在!"); } $this -> sql[$methodName] = $args[0]; /*返回对象,为了实现连贯操作*/ return $this; } public function open(){ // $sql = "select * from user where id > 5 order id desc limit 0,10"; if($this -> sql['where']){ $where = "WHERE {$this -> sql['where']}"; } if($this -> sql['order']){ $order = "ORDER {$this -> sql['order']}"; } if($this -> sql['limit']){ $limit = "LIMIT {$this -> sql['limit']}"; } $sql = "SELECT {$this->sql['field']} FROM {$this -> sql['table']} {$where} {$order} {$limit}"; echo $sql; } } $happy = new happy(); //$happy -> selet('a','b'); //aa('aaaa') 这个方法由客户传过来没有定义需要进行判断处理 //$happy -> aa('aaaa'); $happy -> table('user') -> field('id,username,pwd') -> limit('0,10') -> order('id DESC') -> where('id<100') -> open(); echo "<pre>"; var_dump($happy);
__autoload() 在实例化对象时,如果类不存在就会被自动调用
function __autoload($className){ /* * 魔术方法 * __autoload() 在实例化对象时,如果类不存在就会被自动调用 * 参数:实例化的类名 * 作用:可以用于自动引入类文件 * * 注意:类文件名要有规律 * 类文件的名要与类名统一的部分 * 类文件的路径要有规律 */ $file = $className.".class.php"; $path = "./class/".$file; /*判断文件是否存在*/ if(file_exists($path)){ include($path); }else{ die("你调用的{$className}.class.php文件不存在"); } echo $path; } $pird = new prid(); var_dump($prid);
相关文章推荐
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload
- PHP中的魔术方法总结:__construct,__destruct ,__call,__callStatic,__get,__set,__isset, __unset ,__sleep,__wakeup,__toString,__set_state,__clone,__autoload
- 魔术方法__clone(), __toString(), __call(), __autoload(), __sleep()和__wakeup()详解
- PHP中的魔术方法:__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload
- PHP中的魔术方法:__construct, __destruct , __call,__get, __set, __isset, __unset , __toString, __set,__clone and __autoload
- PHP | 魔术方法 | __toString(),__clone(),__call(),__autoload() 详解
- PHP面向对象:魔术方法__call()
- php中的魔术方法__call(),__clone(),__set(),__get()
- 魔术方法(__toString()+ __call()+ __clone() +__autoload())+单例模式
- PHP中的魔术方法总结 :__construct,__destruct ,__call,__callStatic,__get,__set,__isset,__unset,__sleep,__wakeup, __toString.......
- php __call __autoload __clone __toString __sleep
- PHP面向对象_对象克隆clone和魔术方法__clone()
- 面向对象之魔术方法_clone
- php面向对象基本概念(魔法方法)__invoke() __toString() __call() __callStatic() __clone()
- PHP面向对象:魔术方法__toString()
- 面向对象之魔术方法_call
- php用魔术方法__call实现类函数重载
- PHP__autoload魔术方法实现自动加载
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toStr
- PHP魔术方法之__call与__callStatic方法