1.常量的定义:
在类内部
const $PI=3.14;
调用:类内部 self::$PI
类外部:类名::$PI;
外部
define("PI",3.14);
2.static静态属性
作用:定义静态变量,静态变量的范围是整个主函数,所以相当于全局变量,而在类中以static声明的变量不属于任何具体对象,而是属于整个类的公共变量;在类中,静态方法不用创建具体对象就可以直接调用。
类内部静态变量的创建:
public static $a=15;
调用:
内部:注意,不能用$this,因为this是调用当前对象的,而static变量则属于类的,属于具体的对象,应该用self::$a,静态方法在内部用self::方法名();
在类外,类名::$a,静态方法的调用:类名::方法名()
3.抽象类
使用abstract修饰的类称为抽象类
关于抽象类
1.不能被实例化
2.子类要么实现抽象方法,不实现也变成抽象类
3.抽象类中可以包含非抽象方法
4.抽象类的作用:为子类提供规范,限制实例化
例子:
<?php
abstract class Animal
{
abstract function cry();
function eat(){
echo "我吃什么?";
}
}
class Cat extends Animal{
function cry(){
echo "喵喵";
}
}
$cat=new Cat();
$cat->cry();
?>
4.接口
声明:interface
实现:implements
关于接口:
1.为什么会有接口?
接口的存在是为了子类提供规范,也可以在一定程度上解决PHP不能多继承的问题。
2.接口使用的一些规则:
1)接口不能实例化
2)接口中所有的方法必须是抽象方法,但不用abstract修饰
3)接口中不能有变量属性,只能用常量
4)接口之间可以实现多继承,用逗号隔开
5.trait
作用:模拟多继承问题
优先级问题:
在有相同方法名的是,当前类的方法会覆盖trait方法,trait方法会覆盖父类方法
例子:
<?php
class Base {
public function sayHello() {
echo 'Hello ';
}
}
trait SayWorld {
public function sayHello() {
parent::sayHello();
echo 'World!';
}
}
class MyHelloWorld extends Base {
use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
?>
结果输出:
hello world
命名空间
定义:
namespace test;
使用:
use test as myplace;
注:在实际编程中,不建议在一个文件中使用多个命名空间。