php应用实例,[PHP]类的完整应用实例
//关键字可以是public,private,protected,static,final
public $name;
private $num;
//定义一个类常量
const PI=3.14;
function __construct(){//一个构造方法
class ClassA{//定义类 //关键字可以是public,private,protected,static,final public $name; private $num; //定义一个类常量 const PI=3.14; function __construct(){//一个构造方法 $this->name='defaultName'; echo 'ClassA构造完毕:'.$this->name.' '; //$name='defaultName';这是创建了一个局部变量$name,与成员变量$name无关 } function __destruct(){//析构方法,可在unset(类实例)或被垃圾回收时自动调用 echo $this->name.' die '; } //下面这个是一个经过final修饰后,不可重写(覆盖)的方法 public final function add($a,$b,$num){//方法前面可以加访问限制符php实例,也可以不(默认public修饰) $this->num=$num; return('function add:'.$a+$b+$num); } } final class ClassB extends ClassA{//ClassB继承了ClassA且ClassB经过final修饰后不可再被继承 function __construct($name){//这是多态的覆盖,覆盖了父类方法 parent::__construct();//调用父类构造:可以没有,仅做parent的使用演示 //parent可以调用父类中的成员变量,成员方法和常量 $this->name=$name; echo 'ClassB构造完毕:'.$this->name.' '; echo 'self调用:'.self::PI.' '; //self可以调用当前类中的静态成员和常量 } function classFunction(){ echo 'get_class($object):'.get_class($this);//获得类 } //当访问一个不存在的或者私有属性(权限不够)或方法的时候,能够触发的下列的魔术方法 //参考: function __set($name, $value){//设置属性的时候自动触发 echo "失败的设置($name:$value) "; } function __get($name){//获取属性的时候自动触发 echo "失败的获取($name) "; } function __isset($name){//isset和empty时自动触发 echo "失败的isset或empty($name) "; } function __unset($name){//unset时自动触发 echo "失败的unset($name) "; } function __call($name, $arguments){//访问一个非静态方法时自动触发 echo "失败的非静态方法调用($name) "; echo '参数'.count($arguments).': '; foreach($arguments as $value){ echo $value.' '; } } static function __callStatic($name, $arguments){//访问一个静态方法时自动触发 echo "失败的静态方法调用($name) "; echo '参数'.count($arguments).': '; foreach($arguments as $value){ echo $value.' '; } } //当将类对象序列化的时候,将会触发以下方法 function __sleep(){ echo '__sleep:序列化后的对象可以存放到文本文件,数据库等地方 '; } //当将序列化后的类对象还原的时候,将会触发以下方法 function __wakeup(){ echo '__wakeup:将已经序列化的字符串转换回对象 '; } } $var=new ClassA();//创建类实例 echo $var->name; echo ' '; echo $var->add(3,4,8);//调用类方法 echo ' '; echo ClassA::PI;//通过类名输出类常量 echo ' '; $var=new ClassB('ClassB');//创建继承类的实例 echo $var->name; echo ' '; $var->classFunction(); echo ' '; $var->num=3;//失败的设置(private修饰的变量只能类内调用和修改) $var->a;//失败的获取 empty($var->a);//失败的empty isset($var->a);//失败的isset unset($var->a);//失败的unset $var->a(1,2);//失败的非静态方法调用 ClassB::a(1,2);//失败的静态方法调用 echo ' '; abstract class People{ abstract function say(); } interface Human_eat{ function eat(); } interface Human_move{ function walk(); function jump(); } class Me extends People implements Human_eat,Human_move{ public $num=1; function say(){ $this->num=2; echo 'I say something '; } function eat(){ echo 'I eat '; } function walk(){ echo 'I walk '; } function jump(){ echo 'I jump '; } function __clone(){//当类实例被克隆的时候调用该方法 echo '被克隆! '; } function __toString(){ return '人 '; } } $var = new Me(); $var->say(); $var->eat(); $var->walk(); $var->jump(); echo $var->num; echo ' '; $i = clone $var;//克隆一个对象 echo $i->num; echo ' '; if($var == $i) echo '内容相等 '; if($var !== $i) echo '地址不相等 '; if($var instanceof Me)//检测当前对象属于哪个类 echo '$var属于Me类 '; if($var instanceof People) echo '$var属于People类 '; if($var instanceof $i) echo '$var与$i同属于某个类 '; echo ' '; $str=serialize($var);//序列化成字符串 echo '序列化后的字符串:'.$str.' '; $i=unserialize($str);//还原成对象 echo $var;//隐式调用__toString(); (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |