类的声明
- 抽象类声明 abstract class Name ; 继承 extends 关键字
- 接口类声明 interface Name ; 继承 implements 关键字
- 最终类声明 final class Name ; 不能继承
class 类名 {
// 类成员
public $name; // 公有成员,可以在类的外部,内部使用
private $num = 0; // 私有成员,只能在类内部使用
protected $price = 1000; // 保护成员,只能在类内,子类使用
// 公有方法
public function getName () {
echo $this -> name;
}
// 获取器:__get 魔术方法
public function __get ($name) {
return $this->$name;
}
// __set和__get魔术方法在对象访问私有属性时自动触发
// 设置器 __set(变量,值)
public function __set ($name,$value) {
$this->$name = $value;
}
// 静态属性 只能通过类访问对象实例化时自动触发
static $classname;
// 静态方法
public static function getClassName () {
echo 类名魔术常量;
}
}
抽象类
abstract class Demo1 {
protected $name = 'administrator';
static $classname = 'Demo';
// abstract 抽象声明,结尾必须分号;
// 必须在子类中重写实现抽象方法
abstract public static function show($na);
}
class Demo2 extends Demo1 {
public static function show($na) {
return $na;
}
}
接口类
// interface接口类 :升级版的抽象类
interface Demo {
// 常量
public const NAME = 'demo';
// 方法public
public function show();
public function get();
}
// 工作类
class Demo1 implements Demo {
// 接口父类中的抽象方法,必须在子类中全部实现
public function show() {
// .....
}
public function get() {
// .....
}
}
// 如果子类中只实现了一部分方法,应该声明为抽象类
abstract class Demo2 implements Demo {
public function show() {
// .....
}
}
// php是单继承
interface A {
// .....
}
interface B {
// .....
}
interface C {
// .....
}
// 可以从多个接口类获取成员,实现多继承
class D implements A,B,C {
// .....
}
命名空间
全局成员:函数,常量,类和接口全局有效,不能重复声明
命名空间解决了命名冲突
namespace one;
function demo() {
return '123';
}
echo demo() . '<br>'; // 当前路径:非限定名称demo()
echo two\demo() . '<br>'; // 相对路径:限定名称two\demo()
echo \one\two\three\demo() . '<br>'; // 绝对路径:完全限定名称\one\two\three\demo();
// 空间分层
namespace one\two;
function demo() {
return '321';
}
// 空间分层
namespace one\two\three;
function demo() {
return '7654321';
}