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;
注:在實際編程中,不建議在一個文件中使用多個命名空間。