<?php/** * Created by PhpStorm. * User: fu * Date: 2017/7/19 * Time: 9:41 */
class Person{
protected $name; private $age;
private $mobile;
function __construct($name, $age) { $this->name = $name; $this->age = $age;
}
/** * 测试使用的不能直接访问的函数 * @param $info */ protected function test1($info){ echo '我的信息:'.$info; } private function test2(){ echo '我不能被直接访问哦~!~!~'; }
// /**// * @return mixed// */// public function getName()// {// return $this->name;// }
/** * __get魔术方法,当在类的外部调用不能直接访问的属性时,该函数方法被自动调用 * 下面的格式是该魔术方法的标准形式,不能改变 * 魔术方法必须是公共的(public),且不能定义为静态的(static),除了__callStatic * __get必须有返回值,所以最后结束的肯定是return语句 * @param $name 被访问的属性的名称,它必须是一个字符串 */ public function __get($name){// echo '在类中查找对应名称的属性:'.$name; if(isset($this->$name)){ return $this->$name; }else{ return null; } }
/** * 魔术方法__set,当设置类中的不能直接访问的属性时,自动调用该函数方法 * 下面的格式是该魔术方法的标准形式,不能改变 * __set不需要返回值 * @param $name 需要设置值的类的属性名称 * @param $value 需要设置的值 */ public function __set($name, $value){ /* * property_exists 它用于判断类当中是否包含某个指定名称的属性 */ if (property_exists($this, $name)){ $this->$name=$value; } }
/** * 魔术方法,判断类中的属性是否被设置了 * 当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。 * @param $name 传入的是类的属性名称 * @return bool 如果属性存在,则返回true;如果不存在,返回false */ function __isset($name){ if (property_exists($this, $name)){ return isset($this->$name); }else{ return false; } }
function __unset($name){ if (property_exists($this, $name)){ $this->$name = null; }else{ return null; } }
/** * 在对象中调用一个不能直接访问的非静态方法时,__call() 会被自动调用。 * @param $name 被访问的函数方法的名称,字符串格式 * @param $arguments 传递过来的函数方法的参数,数组格式 */ function __call($name, $arguments){// echo '需要被访问的函数名称:'.$name;// var_dump($arguments); if(method_exists($this, $name)){ call_user_func_array(array($this, $name), $arguments); }else{ echo '没有对应的函数可以被调用'; }
}
/** * 魔术方法,当以字符串格式输出类的对象时,默认被自动调用 * 该函数方法结束必须有一个return语句,且返回的值必须是字符串 */ function __toString(){ return '姓名:'.$this->name.',年龄:'.$this->age;// return 100; }
/** * 当类的对象被克隆时自动调用执行 * 在这里可以修改被克隆的数据值 */ function __clone(){ echo '<br>数据对象被复制了一个备份<br>'; $this->age = 35; }
}
$p = new Person('李四', 30);//$p->test1('成都');//echo '<br><br>';//$p->test2();//echo '<br><br>';//$p->test3();
//echo '<br><br>';//echo $p;//print $p;echo '<br><br>';print_r($p);echo '<br><br>';$p2 = clone $p;$p2->name = '王五';print_r($p2);
//echo '<br><br>';//var_dump($p);
//echo $p->name;//echo $p->age;//echo $p->mobile;//var_dump($p);//////$p->name = '成都';//$p->mobile = '13066666666';//$p->birth = '2000-01-01';////unset($p->age);//echo '<br><br>修改后的对象值:';//var_dump($p);//////if(isset($p->name)){// echo 'OK';//}else{// echo 'No';//}
转载于:https://www.cnblogs.com/ZJCD/p/7217444.html
