13 php面向对象编程的相关技术

1       php面向对象编程的相关技术

1.1    对象遍历

    class A{

        public $name = "sora";

        public $age = "20";

        protected $abilty = "php";

        private $hobby = "music";  

        public function display(){

            echo "对象属性如下:<br/>";

            foreach($this as $key => $value){

                echo "$key=$value<br/>";

            }

        }  

    }

    // 在类的外部只能遍历public属性

    $a = new A;

    foreach($a as $key => $value){

        echo "$key=$value<br/>";

    }

    echo "-----------";

    $a->display();

1.2    php内置标准类

如果,我们希望把一些数据,以对象的属性的方式存储,同时又不想去定义一个类,可以考虑使用php内置标准类stdClass。

php的内置标准类stdClass,这个是系统默认提供,不需要创建,直接使用。

案例说明:

    $a = new stdClass;

    var_dump($a);//什么都没有

    $a->name = "sora";

    $a->age = 20;

    var_dump($a);

1.3    数据类型转对象和对象转数组的说明

    //数组转对象

   $arr = array('name'=>'sora','age'=>20);

   $obj_arr = (object)$arr;

   var_dump($obj_arr);

   //访问数组对象的属性还是一样的方法

   echo "<br/>$obj_arr->name";

   echo "<br/>$obj_arr->age";

   echo "<br>--------------<br/>";

    //int转对象

    $num = 11;

    $obj_num = (object)$num;

    var_dump($obj_num);

    echo "<br/>----------<br/>";

    //对象转数组

    class Simple{

        public $name = "kaze";

        protected $age = "12";

        private $address = "sn";

    }

    $simple = new Simple;

    $simple_arr = (array)$simple;

    var_dump($simple_arr);

    echo "<br/>";

    echo $simple_arr['Simpleaddress'];

    // protected和private还是无法访问,即使转化为数组

1.4    对象序列化和反序列化

l  基本介绍

所谓对象序列化是指:将一个对象转换成一个字符串,这个字符串包括属性名,属性值,属性类型,和该对象对应的类名。简单来说就是把一个对象的数据和数据类型转成字符串。

    class Test{

        public $name;

        protected $age;

        private $food;

        public function __construct($name,$age,$food){

            $this->name = $name;

            $this->age = $age;

            $this->food = $food;

        }

    }

    $test = new Test('sora','20','gohan');

    $test_serial = serialize($test);

    file_put_contents("D:/phpstudy/phpstudy_pro/WWW/test/Test.log",$test_serial);

只有序列号之后才能将一个对象存入文件。

l  反序列化操作

    class Test{

        public $name;

        protected $age;

        private $food;

        public function __construct($name,$age,$food){

            $this->name = $name;

            $this->age = $age;

            $this->food = $food;

        }

    }

   

    $test_serial = file_get_contents("D:/phpstudy/phpstudy_pro/WWW/test/Test.log");

    $test = unserialize($test_serial);

    var_dump($test); 

1.5    类与对象的相关函数

    class A{

        public $name = '路人a';

        public function speak(){

            echo "say something";

        }

    }

    //判断类是否存在

    if(class_exists('A')){

        $a = new A;

        if(property_exists($a,'name')){

            echo "$a->name<br/>";

        }else{

            echo "属性不存在<br/>";

        }

        //判断成员方法是否存在

        if(method_exists($a,'speak')){

            $a->speak();

        }else{

            echo "此方法不存在";

        }

        //得到类名

        echo get_class($a);

    }else{

        echo "类不存在<br/>";

    }

其它的手册查。

1.6    traits技术

就相当于是用一句话就粘贴下了整个代码。需要修改也只需要修改trait里的代码段。

    trait code{

        public function getSum($num1,$num2){

            return $num1+$num2;

        }

        public function getMax($num1,$num2,$num3){

            return max($num1,$num2,$num3);

        }

    }

 

    class A{

        //如果trait里面的方法有和父类里一样的名字的,优先是trait里的方法

        public function getSum($num1,$num2){

            echo "The result is:";

            return $num1+$num2;

        }

    }

    class B extends A{

        //使用trait代码段

        use code;

    }

    class C extends A{

 

    }

    class D{

        //使用trait代码段

        use code;

    }

    $b = new B;

    echo $b->getSum(1,2);

    echo $b->getMax(2,3,4);

本文作者:xiaoovo

本文链接:https://www.cnblogs.com/xiaoovo/p/15968157.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   xiaoovo  阅读(24)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑