您的位置:首页 > 编程语言 > PHP开发

php面向对象(一)

2015-11-01 20:06 661 查看


php面向对象(一)

php


zp2015-10-31
14:52-23

php的面向对象很规矩啊,与js不同,js中没有类,没有接口,处处为对象;php有类,有接口,有很规矩的对象。

php的对象就是类的实例化:
class Dog implements IAnimal{

public function Eat() {

echo "dog can eat...";

}

}

$dog = new Dog();

$dog->Eat();

[/code]

$dog
是类
Dog
的实例化对象,拥有
Eat
方法,我们可以看,这个方法是
public
得,
public
是php得一个关键字,下面我们就来看一下php的关键字。

public

在本类,子类或其他类中都可以访问到;
private

只有在本类中可以访问到;
protected

在本类,子类中可以访问到,其他类中不可以访问到;
static

对象被销毁后,仍然会保留
static
类型的成员变量和方法,(静态方法中只能调用静态变量,但是普通方法中都可以调用)静态类型在类第一次被加载时就已经被分配了内存空间。个人感觉着有点像js中的全局变量啊。
final
:表示不可以继承,假如是类,则不可以有子类,如果是类中的方法,则该方法不可以重写和覆盖。

final class Dog{

public function eat() {

echo "dog can eat...";

}

}

class Spot extends Dog {};

// 报错,Dog类是final类型,不可以有子类

[/code]
class Dog {

final function eat() {

echo "dog can eat...";

}

}

class Spot extends Dog{

function eat() {

echo "sopt can eat...";

}

};

// 报错,方法类型为final,不能被覆盖

[/code]

类常量
const PI = 3.1415926;

class Dog {

const PI = 3.14;

}

echo Dog::PI;  // Dog为作用域符号,指的是调用Dog类下的常量PI,Dog类并不用实例化就可以访问到

$dogA = new Dog();

echo $dogA->PI;   // 报错,类常量不可以这么访问

[/code]

构造方法和析构函数

构造函数(
__construct
)对类的一些成员变量进行初始化;

析构函数(
__destruct
)与构造函数相反,对象被销毁时调用,来释放内存,但是使用根本不多,因为php不像C++那样,php有垃圾回收机制,所以析构函数不怎么用写就可以。
class Dog {

public $name;

public $age;

private $job;  // 本类以外不能调用

function __construct($name,$age,$job) {

$this->name = $name;

$this->age = $age;

$this->job = $job;

echo "实例化对象时来调用初始化变量";

}

// 我们复写一下这个析构函数,来看其何时调用

function __destruct() {

echo "实例化对象内存被销毁";

}

}

$dog = new Dog("zp",19,"student");  // 实例化对象时来调用初始化变量

echo $dog->name;

// echo $dog->job;   // 报错啊,job是私有变量啊

unset($dog);    // 实例化对象内存被销毁

[/code]

继承

在继承时,php子类的构造函数,会优先调用子类的构造函数
class Animal{

function __construct() {

echo '我是父类构造函数';

}

}

class Dog extends Animal{

function __construct() {

echo '我是子类构造函数';

}

}

$dog = new Dog();// 我是子类的构造函数

[/code]

抽象类和接口,抽象类->抽象类中至少要包含一个抽象方法,抽象方法并没有方法体,方法体必须在子类中去实现,并且抽象类不可以被实例化。
abstract class Animal{

abstract function eat();

}

class Dog extends Animal{

function eat () {

echo "dog can eat...";

}

}

$dog = new Dog();

$dog = new Animal();   // 报错

$dog->eat();

[/code]

接口,用关键字
interface
来定义接口,接口中不会写任何的方法体,全部依靠类来实现,类实现接口用关键字
implements

interface IAnimal{

function Eat();

}

class Dog implements IAnimal{

public function Eat() {

echo "dog can eat...";

}

}

$dog = new Dog();

$dog->Eat();

[/code]

php只支持单继承,但是我们可以用接口来实现多继承:
interface IAnimal{

function Eat();

}

interface IDog{

function Sleep();

}

class Dog implements IAnimal,IDog{

public function Eat() {

echo "dog can eat...";

}

public function Sleep() {

echo "dog can sleep...";

}

}

$dog = new Dog();

$dog->Eat();

$dog->Sleep();

[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: