ITPub博客

首页 > IT职业 > IT生活 > PHP 对象

PHP 对象

IT生活 作者:fwang3 时间:2021-09-09 09:16:41 0 删除 编辑

header('content-type:text/html;charset=utf-8');

  

 

class Person{

    public $name;

    public $age;

    public $sex;

    public $marr = array('eat','drink','song');

    //初始化时调用构造函数

    function __construct($name,$age,$sex){

        $this->name = $name;

        $this->age     = $age;

        $this->sex     = $sex;

    }

    //echo 对象时调用

    function __toString(){

      return '本人的基本信息如下:我是津沙港湾,30岁,男性
';

    }

    //clone对象时调用

    function __clone(){

        echo '克隆一个对象,this是一个副本
';

        $this->name;

        $this->age=20;

        $this->sex;

    }

   

    //调用不同的方法名

    function __call($method,$args){

                if(in_array($method, $this->marr)){

                    foreach ($args as $arg)

                    echo $arg."
";

                }else{

                    echo "您调用的方法{$method}()不存在";

                }

    }    

     

    static function __callstatic($method,$args){

        echo "您调用的静态方法{$method}不存在";

    }

     

    function say() {

        echo '我是津沙港湾
';

    }

     

    //串行化 serialize时调用

    function __sleep(){

        echo '指定串行化的对象属性名
';

       return array('name','age');//必须返回数组

       //指定只串行化name和age这个两个对象属性

       //O:6:"Person":2:{s:4:"name";s:12:"津沙港湾";s:3:"age";i:23;}

    }

     

    //反串行化 unserialize时调用

    function __wakeup(){

        echo '反串行化时自动调用
';

        //反串行化时设置成员属性的值

        $this->age = 43;

    }

     

    //var_export导出类信息

    static function __set_state($arr){//参数是数组

        echo 'var_export导出类信息时自动调用
';

        $p = new Person("小状元", 33, "female");

        $p->name = $arr['name'];

        $p->age = $arr['age'];

        $p->sex = $arr['sex'];

        return $p;

    }

     

    //调用函数方式调用对象 $p();

    function __invoke($a,$b,$c){

        echo '调用函数方式调用对象时自动调用'.$a.$b.$c.'
';

    }

     

}

 

//原本

$p = new Person('津沙港湾',23,'男');

 

//toString()

echo $p;

 

//__call()

$p->eat('鱼','肉');

$p->drink('茶','酒');

$p->song('歌','戏');

 

 

//副本 __clone()

$a = clone $p;

echo $a->age;

 

//serialize 对象转成字符串

$str = serialize($p);

//O:6:"Person":4:{s:4:"name";s:12:"津沙港湾";s:3:"age";i:23;s:3:"sex";s:3:"男";s:4:"marr";a:3:{i:0;s:3:"eat";i:1;s:5:"drink";i:2;s:4:"song";}}

file_put_contents("MrYang.txt", $str);

echo '对象串行化成功,保存到MrYang文件中';

 

$arr = array(

        'name' => '津沙港湾',

        'age'    => 32,

        'sex'    => 'male',

    );

    //数组串行化{"name":"u6d25u6c99u6e2fu6e7e","age":32,"sex":"male"}

    $str = json_encode($arr);

    echo $str;

     

    //数组反串行化 转成对象

    $parr = json_decode($str);

    var_dump($parr);//变成一个对象

   

    //变成一个对象

    echo $parr->name;

    //转成数组 要加第二个参数true

    $parr = json_decode($str,true);

    var_dump($parr);

 

//var_export  __set_state()

$p = new Person("津沙港湾", 20, "male");

//设定的属性可以传到$arr中去

$p->name = '火山岛';

$p->age = 500;

$p->sex = 'male';

eval('$b='.var_export($p,true).';');//加ture变成字符串

var_dump($b);//类信息以__set_state()中设定值为准

//调用函数方式

$p(1,2,3);

//__callstatic 调用不存在的静态方法时自动调用

Person::speak();

//__autoload 调用类中的方法时自动加载类文件

function __autoload($classname){

    include $classname.'.class.php';

}

Test::laugh();


对象反串行化

include 'index.php';

//读取文件内容 字符串

$str = file_get_contents('MrYang.txt');

//反串行化 字符串转成对象

$p = unserialize($str);

 

$p ->say();

echo $p->age;


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4365/viewspace-2801677/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: python基础知识
请登录后发表评论 登录
全部评论

注册时间:2019-08-12

  • 博文量
    0
  • 访问量
    508