移动app接口编程技术-学习实现之PHP类其他特性
来源:互联网 发布:java中list用法 编辑:程序博客网 时间:2024/06/05 06:00
Static静态关键字
静态。 在类中,被他标记的变量或方法,不属于任何一个对象。访问的时候要使用“::“。并且在类中自我调用的时候要是用”self::”
例如:
<?phpclass Car { private static $speed = 10; public function getSpeed() { return self::$speed; } //在这里定义一个静态方法,实现速度累加10 public static function speedUp() { return self::$speed += 10; }}$car = new Car();Car::speedUp(); //调用静态方法加速echo $car->getSpeed(); //调用共有方法输出当前的速度值
静态方法也可以通过变量来进行动态调用。
$func = 'getSpeed';$className = 'Car';echo $className::$func(); //动态调用静态方法
- 访问控制
访问控制通过关键字public,protected和private来实现。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。
类属性必须定义为公有、受保护、私有之一。
类中的方法可以被定义为公有、私有或受保护。如果没有设置这些关键字,则该方法默认为公有。
如果构造函数定义成了私有方法,则不允许直接实例化对象了,这时候一般通过静态方法进行实例化,在设计模式中会经常使用这样的方法来控制对象的创建,比如单例模式只允许有一个全局唯一的对象。
class Car { private function __construct() { echo 'object create'; } private static $_object = null; public static function getInstance() { if (empty(self::$_object)) { self::$_object = new Car(); //内部方法可以调用私有方法,因此这里可以创建对象 } return self::$_object; }}//$car = new Car(); //这里不允许直接实例化对象$car = Car::getInstance(); //通过静态方法来获得一个实例
- 继承
<?phpclass Car { public $speed = 0; //汽车的起始速度是0 public function speedUp() { $this->speed += 10; return $this->speed; }}//定义继承于Car的Truck类class Truck extends Car{ public function speedUp() { $this->speed = parent::speedUp() + 50; }}$car = new Truck();$car->speedUp();echo $car->speed;
- 重载
PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的。属性的重载通过__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;
方法的重载通过__call来实现,当调用不存在的方法的时候,将会转为参数调用__call方法,当调用不存在的静态方法时会使用__callStatic重载。
lass Car { public $speed = 0; public function __call($name, $args) { if ($name == 'speedUp') { $this->speed += 10; } }}$car = new Car();$car->speedUp(); //调用不存在的方法会使用重载echo $car->speed;
- 类对象比较
对象比较,当同一个类的两个实例的所有属性都相等时,可以使用比较运算符“==“进行判断,当需要判断两个变量是否为同一个对象的引用时,可以使用全等运算符“===“进行判断。
class Car {}$a = new Car();$b = new Car();if ($a == $b) echo '=='; //trueif ($a === $b) echo '==='; //false
对象复制,在一些特殊情况下,可以通过关键字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);
对象序列化,可以通过serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化成对象进行使用。
class Car { public $name = 'car';}$a = new Car();$str = serialize($a); //对象序列化成字符串echo $str.'<br>';$b = unserialize($str); //反序列化为对象var_dump($b);
- 移动app接口编程技术-学习实现之PHP类其他特性
- 移动app接口编程技术-学习实现之PHP进阶 类与对象
- 移动app接口编程技术-学习实现之PHP进阶 数组
- 移动app接口编程技术-学习实现之PHP进阶 函数
- 移动app接口编程技术-学习实现之PHP 字符串
- app接口开发之php实现
- java技术加强之其他1.5特性
- 使用php开发移动APP接口
- php开发app接口之android端的简易实现
- app接口设计之token的php实现
- app接口设计之signature签名的php实现
- app接口设计之token的php实现
- app接口设计之signature签名的php实现
- app接口设计之token的php实现
- app接口设计之token的php实现
- app接口设计之signature签名的php实现
- app接口设计之token的php实现
- PHP学习笔记----PHP接口技术
- iOS—字符串显示不同的颜色
- hdu2874-Connections between cities (LCA/离线tarjan)
- 2.Add Two Numbers
- hdu 1877 Java 水题系列
- 没有伞的孩子必须努力奔跑
- 移动app接口编程技术-学习实现之PHP类其他特性
- 八皇后问题-回溯法
- UVALive - 5842 Equipment
- action判断是否结束,然后调用回调函数
- 观察者网一周图说:一张图看懂中美制造业的真实成本
- Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack.
- 用opencv训练分类器
- spring 整合hibernate
- EmguCv +Kinect2.0 获取面部信息