PHP学习笔记11:类和对象

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代码执行完毕后会自动回收和销毁对象,一般不需要显示调用unset
6. 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值