移动app接口编程技术-学习实现之PHP类其他特性
-
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教程有兴趣的朋友有所帮助。
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频