美文网首页php学习
php进阶(一)之数组与类

php进阶(一)之数组与类

作者: 半数的年 | 来源:发表于2018-07-16 10:29 被阅读0次

    一、数组:索引数组、关联数组。

    1、索引数组

    (1)、初始化
    $fruit = array('苹果','香蕉','菠萝');
    print_r($fruit);
    

    输出

    Array
    (
        [0] => 苹果
        [1] => 香蕉
        [2] => 菠萝
    )
    
    (2)、用foreach遍历关联数组
    <?php
    $fruit=array('苹果','香蕉','菠萝');
    foreach($fruit as $key=>$value){
        echo '<br>第'.$key.'值是:'.$value;
    }
    ?>
    

    输出

    第0值是:苹果
    第1值是:香蕉
    第2值是:菠萝
    

    2、关联数组

    (1)、初始化
    <?php
    //创建一个关联数组,关联数组的键“orange”,值是“橘子”
    $fruit = array(
        'orange'=>'橘子'
    );
    ?>
    
    (2)、用foreach遍历关联数组(与索引数组类似)

    二、类与对象

    属性

    默认都为public,外部可以访问。一般通过->对象操作符来访问对象的属性或者方法,对于静态属性则使用::双冒号进行访问。当在类成员方法内部调用的时候,可以使用$this伪变量调用当前对象的属性。

    方法

    使用关键字static修饰的,称之为静态方法,静态方法不需要实例化对象,可以通过类名直接调用,操作符为双冒号::。

    访问限制

    被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。

    继承

    parent::speedUp(); // 使用parent访问父类方法

    重载

    PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的。
    (1)、属性的重载通过__set,__get,__isset,__unset来分别实现对不存在属性的赋值、读取、判断属性是否设置、销毁属性。

    class Car {
        private $ary = array();
        
        public function __set($key, $val) {
            $this->ary[$key] = $val;
        }
        
        public function __get($key) {
            if (isset($this->ary[$key])) {
                return $this->ary[$key];
            }
            return null;
        }
        
        public function __isset($key) {
            if (isset($this->ary[$key])) {
                return true;
            }
            return false;
        }
        
        public function __unset($key) {
            unset($this->ary[$key]);
        }
    }
    $car = new Car();
    $car->name = '汽车';  //name属性动态创建并赋值
    echo $car->name;
    

    (2)、方法的重载通过__call来实现,当调用不存在的方法的时候,将会转为参数调用__call方法,当调用不存在的静态方法时会使用__callStatic重载。

    class Car {
        public $speed = 0;
        
        public function __call($name, $args) {
            if ($name == 'speedUp') {
                $this->speed += 10;
            }
        }
    }
    $car = new Car();
    $car->speedUp(); //调用不存在的方法会使用重载
    echo $car->speed;
    
    高级特性

    (1)、对象比较,当同一个类的两个实例的所有属性都相等时,可以使用比较运算符==进行判断,当需要判断两个变量是否为同一个对象的引用时,可以使用全等运算符===进行判断。

    class Car {
    }
    $a = new Car();
    $b = new Car();
    if ($a == $b) echo '==';   //true
    if ($a === $b) echo '==='; //false
    

    (2)、对象复制,在一些特殊情况下,可以通过关键字clone来复制一个对象,这时__clone方法会被调用,通过这个魔术方法来设置属性的值。

    class Car {
        public $name = 'car';
        
        public function __clone() {
            $obj = new Car();
            $obj->name = $this->name;
        }
    }
    $a = new Car();
    $a->name = 'new car';
    $b = clone $a;
    var_dump($b);
    

    (3)、对象序列化,可以通过serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化成对象进行使用。

    class Car {
        public $name = 'car';
    }
    $a = new Car();
    $str = serialize($a); //对象序列化成字符串
    echo $str.'<br>';
    $b = unserialize($str); //反序列化为对象
    var_dump($b);
    

    相关文章

      网友评论

        本文标题:php进阶(一)之数组与类

        本文链接:https://www.haomeiwen.com/subject/xmwppftx.html