属性声明是由关键字 public,protected或者 private 开头,然后跟一个普通的变量声明来组成。属性中的变量可以初始化,但是初始化的值必须是常数。在类的成员方法里面,可以用 ->(对象运算符):$this->property(其中 property 是该属性名)这种方式来访问非静态属性。静态属性和常量则是用 ::(双冒号):self::$property 来访问
类的自动加载: spl_autoload_register() 函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class)和接口(interface)时自动去加载。
<?php
//自动加载类MyClass1和MyClass2
spl_autoload_register(function ($class_name) {
require_once $class_name . '.php';
echo "Want to load $class_name.\n";
throw new Exception("Unable to load $class_name.");
});
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
继承实现了函数的重载时,需要使用“parent::”后加函数名来访问父类的实现方法
构造函数:void __construct ([ mixed $args
[, $...
]] )
析构函数:void __destruct ( void )
self,parent 和 static 这三个特殊的关键字是用于在类定义的内部对其属性或方法进行访问的
抽象函数:
实现类可以定义抽象类中抽象函数未定义的参数
<?php
abstract class AbstractClass
{
// 我们的抽象方法仅需要定义需要的参数
abstract protected function prefixName($name);
}
class ConcreteClass extends AbstractClass
{
// 我们的子类可以定义父类签名中不存在的可选参数
public function prefixName($name, $separator = ".") {
if ($name == "Pacman") {
$prefix = "Mr";
} elseif ($name == "Pacwoman") {
$prefix = "Mrs";
} else {
$prefix = "";
}
return "{$prefix}{$separator} {$name}";
}
}
$class = new ConcreteClass;
echo $class->prefixName("Pacman"), "\n";
echo $class->prefixName("Pacwoman"), "\n";
?>
魔术方法:PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀。
默认情况下对象是通过引用传递的