北京总部

PHP入门学习——类与面向对象篇

作者: 来源: 时间: 2017-01-06 11:14:49

在PHP入门学习里,类与面向对象的相关知识你了解多少呢?一起来看看吧!

一、类的定义与对象创建

1.定义一个类

classCar {

//定义属性

public$name = '汽车';

//定义方法

publicfunction getName() {

//方法内部可以使用$this伪变量调用对象的属性或者方法

return$this->name;

}

2、创建对象

第一种方式:

$car = new Car();

第二种方式:用变量来创建

$className = 'Car';

$car = new$className();

二、访问控制

访问控制通过关键字public,protected和private来实现。

public:被定义为公有的类成员可以在任何地方被访问。

protected:被定义为受保护的类成员则可以被其自身以及其子类和父类访问。

private:被定义为私有的类成员则只能被其定义所在的类访问。

三、构造函数和析构函数

(1)PHP5可以在类中使用construct()定义一个构造函数,具有构造函数的类,会在每次对象创建的时候调用该函数,因此常用来在对象创建的时候进行一些初始化工作。

class Car {

function construct() {

print "构造函数被调用";

}

}

$car = new Car(); //实例化的时候 会自动调用构造函数__construct,这里会输出一个字符串。

在子类中如果定义了construct则不会调用父类的construct,如果需要同时调用父类的构造函数,需要使用parent::construct()显式的调用。

class Car {

function construct() {

print "父类构造函数被调用";

}

}

class Truck extends Car {

function construct() {

print "子类构造函数被调用";

parent::construct();

}

}

$car = new Truck();

(2)PHP5支持析构函数,使用destruct()进行定义,析构函数指的是当某个对象的所有引用被删除,或者对象被显式的销毁时会执行的函数。

class Car {

function construct() {

print "构造函数被调用 ";

}

function __destruct() {

print "析构函数被调用 ";

}

}

$car = new Car(); //实例化时会调用构造函数

echo '使用后,准备销毁car对象 ';

unset($car); //销毁时会调用析构函数

当PHP代码执行完毕以后,会自动回收与销毁对象,因此一般情况下不需要显式的去销毁对象。

四、Static静态关键字

静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进行调用。静态属性不允许对象使用->操作符调用。

class Car {

private static $speed = 10;

public static function getSpeed() {

return self::$speed;

}

}

echo Car::getSpeed(); //调用静态方法

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

$func = 'getSpeed';

$className = 'Car';

echo $className::$func(); //动态调用静态方法

静态方法中,$this伪变量不允许使用。可以使用self,parent,static在内部调用静态方法与属性。

class Car {

private static $speed = 10;

public static function getSpeed() {

return self::$speed;

}

public static function speedUp() {

return self::$speed+=10;

}

}

class BigCar extends Car {

public static function start() {

parent::speedUp();

}

}

BigCar::start();

echo BigCar::getSpeed();

五、对象继承与重载

建立一个Truck类,扩展Car类,并覆盖speedUp方法,使速度累加50

classCar {

public$speed = 0; //汽车的起始速度是0

publicfunction speedUp() {

$this->speed+= 10;

return$this->speed;

}

}

//定义继承于Car的Truck类

classTruck extends Car{

publicfunction speedUp() {

$this->speed= parent::speedUp()+50;

return$this->speed;

}

}

$car= new Truck();

$car->speedUp();

echo$car->speed;

(2)重载

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

class Car {

private $ary = array();

publicfunction __set($key, $val) {

    $this->ary[$key] = $val;

}

 

publicfunction __get($key) {

    if (isset($this->ary[$key])) {

        return $this->ary[$key];

    }

    return null;

}

 

publicfunction __isset($key) {

    if (isset($this->ary[$key])) {

        return true;

    }

    return false;

}

 

publicfunction __unset($key) {

    unset($this->ary[$key]);

}

}

$car = new Car();

$car->name = '汽车'; //name属性动态创建并赋值

echo $car->name;

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

class Car {

public $speed = 0;

publicfunction __call($name, $args) {

    if ($name == 'speedUp') {

        $this->speed += 10;

    }

}

}

$car = new Car();

$car->speedUp(); //调用不存在的方法会使用重载

echo $car->speed;

了解更多PHP入门学习知识欢迎访问中软国际教育集团技术知识库,邀上小伙伴们一起来吧!

相关阅读

更多

中软卓越java培训地址:北京市海淀区科学院南路2号融科资讯中心C座北楼12层 联系电话:400-666-3775 邮箱账号:etc-marketing@chinasofti.com

©2008-2016 北京中软国际教育科技股份有限公司 京ICP备14058756号-2