创建类(class)
class classname{
public $attribute1;
public $attribute2;
function operation1()
{
}
function operation2($param1, $param2)
{
}
} 构造函数
大多数类都有一种称为构造函数的特殊操作。当创建一个对象时,它将调用构造函数,通常,这将执行一些有用的初始化任务:例如,设置属性的初始值或者创建该对象需要的其他对象。
构造函数的声明与其他操作的声明一样,只是其名称必须是__construct()。
尽管可以手工调用构造函数,但其本意是在创建一个对象时自动调用。
class classname
{
function __construct($param)
{
echo "Constructor called with parameter".$param."<br />";
}
} 析构函数
与构造函数相对的就是析构函数。析构函数允许在销毁一个类之前执行一些操作或完成一些功能,这些操作或功能通常在所有对该类的引用都被重置或超出作用域时自动发生。
与构造函数的名称类似,一个类的析构函数名称必须是__destruct().析构函数不能带任何册参数。 类的实例化
可以使用关键词"new"来创建一个对象。 使用类的属性
在一个类中,可以访问一个特殊的指针——$this.
如果当前类的一个属性为$attribute, 则当在该类中通过一个操作设置或访问该变量时,可以使用$this->attribute来引用。
class classname
{
public $attribute;
function operation($param)
{
$this->attribute = $param;
echo $this->attribute;
}
}
通常,从类的外部直接访问类的属性是槽糕的想法。面向对象方法的一个有点是鼓励使用封装。
可以通过使用__get()和__set()函数来实现对属性的访问。
class classname
{
public $attribute;
function __get($name)
{
return $this->$name;
}
function __set($name, $value)
{
$this->$name = $value;
}
} 使用private和public关键字控制访问
PHP支持如下3中访问修饰符:
class B extends A
{
public $attribute2;
function operation2()
{
}
}
class A
{
public $attribute1;
function operation1()
{
}
} 通过继承使用private和protected访问修饰符控制可见性
引用
可以使用使用private和protected访问修饰符控制需要继承的内容。如果一个属性或方法被指定为private,它将不会被继承。如果一个属性或方法被指定为protected,它将在类外部不可见,但是可以被继承。
<?php
class Math{
const pi = 3.14159;
}
echo "Math::pi = ".Math::pi."\n";
?> 实现静态方法
PHP允许使用static关键字。该关键字适用于允许在未初始化类的情况下就可以调用的方法。
class Math
{
static function squared($input)
{
return $input*$input;
}
}
echo Math::squared(8); 请注意,在一个静态方法中,不能使用this关键字。因为可能会没有可以引用的对象实例 检查类的类型和类型提示 instanceof关键字允许检查一个对象的类型。可以检查一个对象是否是特定类的实例,是否是从某个类继承过来或者是否实现了某个接口。 延迟静态绑定(late static binding)
该特性允许在一个静态继承的上下文中对一个被调用类的引用。父类可以使用子类重载的静态方法。
<?php
class A {
public static function who(){
echo __CLASS__;
}
public static function test(){
static::who(); //Here comes Late Static Bindings
}
}
class B extends A {
public static function who(){
echo __CLASS__;
}
}
B::test();
?>
输出B; 克隆对象
PHP提供了clone关键字,该关键字允许复制一个已有的对象。例如:
$c = clone $b;
将创建与对象$b具有想同类的副本,而且具有相同的属性值。 使用抽象类
PHP还提供了抽象类,这些类不能被实例化,同样类方法也没有没有实现,只是提供类方法的声明,没有具体实现。
abstract operationX($param1, $param2);
包含抽象方法的任何类自身必须是抽象的,如下例所示:
abstract class A
{
abstract function operationX($param1, $params);
}
引用
抽象方法和抽象类主要用于复杂的类层次关系中,该层次关系需要确保每一个子类都包含并重载了某些特定的方法,这也可以通过接口来实现。