## 1.構造方法
~~~
public function __construct($name,$age){
};
~~~
## 2.析構方法(使用unset刪除時會執行)
~~~
public function __destruct(){
echo '我被刪除了';
}
~~~
## 3.魔術方法
~~~
public function __get($param){
return $this->$param;
}
~~~
>定義一個get魔術方法(用于讀取)
~~~
public function __set($param,$value){
if($param == 'age'){
if($value>0){
$this->$param = $value;
}
}
}
~~~
>定義一個set魔術方法(用于寫入)
~~~
public function __isset($param){
return isset($this->$param);
}
~~~
>定義一個isset魔術方法(用于判斷對象中非共有屬性是否存在)
~~~
public function __unset($param){
unset($this->$param);
}
~~~
>定義一個unset魔術方法(用于銷毀一個對象的非共有屬性)
判斷一個對象中屬性是否存在
~~~
if(isset($object->name)){};
~~~
銷毀一個對象中私有屬性
~~~
unset($object->name);
~~~
* * * * *
~~~
public function __call($name,$param){
echo '你調用的方法$name不存在';
echo '你本次調用的參數為';
print_r($param);
}
~~~
>當一個方法不存在時自動使用此魔術方法
~~~
public function __autoload($classname){
$str = $classname.'.class.php';
if(file_exists($str)){
require($str);
}
}
~~~
>自動加載函數
>當實例化一個不存在的類時會自動使用此方法
## 4.繼承一個類
~~~
class B extends A{}
~~~
## 5.使用父級函數
~~~
parent::__construct($name,$age);
~~~
## 6.靜態方法或屬性
~~~
public static $name = '';
public static function index(){}
~~~
## 7.調用當前類的靜態方法
~~~
self::index();
~~~
## 8.修飾符
~~~
final //不可覆蓋或繼承
~~~
## 9.單例設計
~~~
class Mysql{
//定義一個靜態屬性用于判斷
static public $link = null;
protected function __construct(){
echo '數據庫連接成功';
}
//定義靜態方法
static public function getConnect(){
//判斷屬性是否為空
if(is_null(self::$link)){
//是為空則賦值當前對象
self::$link = new Mysql;
}
return self::$link;
}
}
$db = Mysql::getConnect();
$a = clone $db;
if($db === $a){
echo 'Y';
}else{
echo 'N';
}
~~~
## 10.類中的常亮
~~~
//定義常亮
const CEO = '首席執行官';
//類中使用常亮
self::CEO;
//對象中使用常亮
A::CEO;
~~~
## 11.判斷一個變量是否屬于一個類
~~~
if($變量 instanceof A){}
~~~
## 12.克隆一個對象
~~~
$s2 = clone $s1; //相當于換了一個名字
~~~
## 13.類型約束
~~~
class A{
public function fun(B $a){
echo 'ok';
}
}
$b = new B();
$a = new A();
$a->fun($b);
~~~
>規定的參數必須是B類的對象或者子對象
## 14.抽象類
~~~
//語法
abstract class A{
//抽象方法
public abstract function func3($name,$age);
}
//繼承一個類完成未完成的方法
class B extends A{
public function func3($name,$age){
}
}
~~~
>子類必須完成父類的方法
## 15.接口
~~~
//語法
interface A{
//抽象方法
public function fun1();
}
//定義一個抽象類
abstract class B implements A{
//這里是中層領導
}
//定義一個普通類
class C extends B{
//去完成老大的方法
public function fun1(){
echo "完成后的方法";
}
}
~~~
>第二步或第三步之間必須完成方法才可使用(第三步可不寫)
## 16.封裝_繼承_多態
~~~
//定義一個主要類
class A{
//必須要通過一個接口才可運行
public function running(PCI $pci){
//開啟
$pic->start();
//關閉
$pic->stop();
}
}
//定義PCI接口(這個接口是提供給子抽象類的接口)
interface PCI{
//定義開啟和關閉的方法
public function start();
public function stop();
}
//繼承PCI接口制作抽象類
class aaa implements PCI{
public function start(){
echo "啟動了";
}
public function stop(){
echo "停止了";
}
}
//創建一個主對象(必須)
$m = new A();
//創建一個抽象對象(相當于一個功能)
$n = new aaa();
//讓$n在$m上運行
$m->running($n);
~~~