当前位置:Gxlcms > PHP教程 > 移动app接口编程技术-学习实现之PHP类其他特性

移动app接口编程技术-学习实现之PHP类其他特性

时间:2021-07-01 10:21:17 帮助过:10人阅读

  • Static静态关键字

    静态。 在类中,被他标记的变量或方法,不属于任何一个对象。访问的时候要使用“::“。并且在类中自我调用的时候要是用”self::”
    例如:

classCar {privatestatic$speed = 10;

    publicfunctiongetSpeed() {returnself::$speed;
    }

    //在这里定义一个静态方法,实现速度累加10publicstaticfunctionspeedUp()
    {returnself::$speed += 10;
    }
}

$car = new Car();
Car::speedUp();  //调用静态方法加速echo$car->getSpeed();  //调用共有方法
输出当前的速度值

静态方法也可以通过变量来进行动态调用。

$func = 'getSpeed';
$className = 'Car';
echo$className::$func();  //动态调用静态方法
  • 访问控制

访问控制通过关键字public,protected和private来实现。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。

类属性必须定义为公有、受保护、私有之一。

类中的方法可以被定义为公有、私有或受保护。如果没有设置这些关键字,则该方法默认为公有。

如果构造函数定义成了私有方法,则不允许直接实例化对象了,这时候一般通过静态方法进行实例化,在设计模式中会经常使用这样的方法来控制对象的创建,比如单例模式只允许有一个全局唯一的对象。

classCar {privatefunction__construct() {echo'object create';
    }

    privatestatic$_object = null;
    publicstaticfunctiongetInstance() {if (empty(self::$_object)) {
            self::$_object = new Car(); 
            //内部方法可以调用私有方法,因此这里可以创建对象
        }
        returnself::$_object;
    }
}
//$car = new Car(); //这里不允许直接实例化对象$car = Car::getInstance(); //通过静态方法来获得一个实例
  • 继承
classCar {public$speed = 0; //汽车的起始速度是0publicfunctionspeedUp() {$this->speed += 10;
        return$this->speed;
    }
}
//定义继承于Car的Truck类classTruckextendsCar{publicfunctionspeedUp() {$this->speed = parent::speedUp() + 50;
    }
}

$car = new Truck();
$car->speedUp();
echo$car->speed;
  • 重载

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

classCar {private$ary = array();

    publicfunction__set($key, $val) {$this->ary[$key] = $val;
    }

    publicfunction__get($key) {if (isset($this->ary[$key])) {
            return$this->ary[$key];
        }
        returnnull;
    }

    publicfunction__isset($key) {if (isset($this->ary[$key])) {
            returntrue;
        }
        returnfalse;
    }

    publicfunction__unset($key) {unset($this->ary[$key]);
    }
}
$car = new Car();
$car->name = '汽车';  //name属性动态创建并赋值echo$car->name;

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

lass Car {
    public$speed = 0;

    publicfunction__call($name, $args) {if ($name == 'speedUp') {
            $this->speed += 10;
        }
    }
}
$car = new Car();
$car->speedUp(); //调用不存在的方法会使用重载echo$car->speed;
  • 类对象比较

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

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

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

classCar {public$name = 'car';

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

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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了移动app接口编程技术-学习实现之PHP类其他特性,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

人气教程排行