PHP学习笔记11:类和对象
来源:互联网 发布:信长野望长野业正数据 编辑:程序博客网 时间:2024/05/17 07:07
1. 定义一个类
class Car{ var $name ='汽车'; function getName(){ return $this->name; }}var代表属性,function代表方法
2. 创建一个类的实例
$car = new Car();//也可以采用变量来创建$className='Car';$car=new $className();3. 类的属性
类中定义的变量称之为属性,也称为字段。可以被访问控制关键字public、private、protected修饰
4. 类的方法
类中定义的函数称之为方法,可以受访问控制关键字public、private、protected修饰
也可以被static修饰,称为静态方法,通过类名和双冒号::直接访问。
class Car{ var $name ='汽车'; public static function getName(){ return $this->name; }}echo Car::getName();5. 构造函数与析构函数
class pCar{ function __construct(){ print "父类的构造函数"; }}class Car extends pCar{ var $name ='汽车'; function __construct(){ print "构造函数\n"; parent::__construct(); } function __destruct(){ print "析构函数\n"; } public static function getName(){ return $this->name; }}$car=new Car(); //此时调用构造函数unset($car); //此时调用析构函数,PHP代码执行完毕后会自动回收和销毁对象,一般不需要显示调用unset6. static静态关键字
用类名::方法名的方式调用。在静态方法中,不允许使用$this,可以使用self、parent。static在内部调用静态方法与属性。
class pCar{ public static $speed=10; public static function start(){ return self::$speed; }}class Car extends pCar{ public static function getSpeed(){ parent::start(); }}pCar::start();7. 访问控制
- 被定义为公有的类成员可以在任何地方被访问
- 被定义为受保护的类成员可以被其自身以及其父类和子类访问
- 被定义为私有的类成员只能被其定义所在的类访问
7.1 类属性必须定义访问控制类型,如被定义为var则表示公有类型(为了兼容PHP5以前的版本)
7.2 类方法的访问控制类型省略时表示公有
7.3 如果构造函数定义为私有方法,则不允许直接实例化对象,这时候一般通过静态方法进行实例化。在设计模式中经常使用这样的方法控制对象的创建,比如单例模式只允许有一个全局唯一的对象。
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();8. 对象继承
extends关键字
9. 重载
PHP的重载指动态地创建类属性和方法,是通过魔法方法(以两个下滑线开头的方法)实现的。当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用。
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){ return isset($this->ary[$key]); } public function __unset($key){ unset($this->ary[$key]); }}$car=new Car();$car->name='汽车'; //name属性动态创建并赋值方法的重载通过__call()来实现,当调用不存在的方法时,转为参数调用__call()方法,当调用不存在的静态方法会使用__callStatic()重载。
class Car{ public $speed=0; public function __call($name,$args){ if($name=='speedUp'){ $this->speed+=10; } }}$car=new Car();$car->speedUp();10. 高级特性
10.1 对象比较
当同一个类的两个实例的所有属性都相等时,比较运算符==判断为true
当两个变量为同一个对象的引用时,比较运算符判断符===判断为true
10.2 对象复制
通过关键字clone复制对象,这时__clone()方法被调用
$a=new Car();$a->name='new car';$b=clone $a;10.3 对象序列化
可以用serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化为对象进行使用。
$a=new Car();$str=serialize($a);$b=unserialize($str);
阅读全文
0 0
- PHP学习笔记11:类和对象
- PHP学习笔记 (类和对象)
- php学习笔记(十)对象和类
- PHP学习笔记7(类和对象1)
- php类和对象学习
- 【小白笔记】PHP学习之路 (23) --对象 __set __get 类和对象的检测
- PHP学习笔记-2(类与对象)
- php类面向对象学习笔记
- 学习笔记-类和对象
- PHP随写笔记,类和对象
- PHP学习笔记--面向对象
- php面向对象学习笔记
- php面向对象学习笔记
- PHP面向对象学习笔记
- c++入门学习笔记--类和对象
- C++学习笔记1--类和对象
- 类和对象学习笔记CarDemo.java
- python学习笔记13--类和对象
- 24点游戏
- jaavscript对象
- 关于HTML的几个技巧
- puthon中同步与互斥知识
- window下cmd命令窗口常用快捷键
- PHP学习笔记11:类和对象
- Leetcode(3)-找最大子串的长度
- Android之控件
- phpstrom2017最新注册码 2017-6-3
- 前端学习笔记3-js-DOM
- python网络
- Halcon算子参考
- Ubuntu资源查看
- UISegmentControl 分段控制器