php物件導向中常用的關鍵字
final
1.final不能修飾成員屬性(類中常量不是用這個關鍵字)
2.final只能修飾類和方法
作用:使用final修飾的類不能被子類繼承
使用final修飾的方法不能被子類覆蓋
用來限制類不被繼承,方法不被覆蓋就使用final
<?php //final修飾的類不能被繼承
final class person
function fun1()
}//student類繼承類用final修飾的person類,所以會報錯
class student extends person
$stu=new student("zs",20,"nan");
$stu->fun1();
?>
static(靜態關鍵字)
1.使用static可以修飾成員屬性和成員方法,不能修飾類
2.用static修飾的成員屬性,可以被同乙個類的所有物件共享
3.靜態的資料是存在記憶體中的資料段中(初始化靜態段)
4.靜態的資料是在類被第一次載入時分配到記憶體中的,以後再用到類時就直接從資料段中獲取
5.什麼是類被載入?只要在程式中使用到這個類(有這個類名出現)
6.靜態方法(static修飾的方法),不能訪問非靜態的成員(在非靜態方法中可以訪問靜態成員)
因為非靜態的成員,就必須用物件來訪問,訪問內部成員使用的就是$this,而靜態方法不用使用物件呼叫,也就沒有物件,$this也就不能代表物件,非靜態的成員還必須使用物件
如果你確定乙個方法中不使用非靜態成員,則可以將這個方法宣告為即靜態方法
注意:靜態的成員都要使用類名去訪問,不要建立物件,不用物件訪問
類名::靜態成員
如果在類中使用靜態成員,可以使用self代表本類
const
1.它只能修飾成員屬性
2.類中宣告常量屬性使用const
3.訪問方式和static靜態成員屬性一樣(在類外部使用 類名::常量 在類內部使用 self::常量)
4.常量一定要在宣告的時候就給初值
<?php //定義乙個類「人們」
class person
function getcountry()
function say(),我的年齡:,我的性別:。
"; }
protected function eat()
function run()
//宣告靜態的方法
static function hello()
}php物件導向中常用的魔術方法
__call()
作用:呼叫物件中不存在的方法時,就會出現系統報錯,然後程式退出。
什麼時候自動呼叫:就會在呼叫乙個物件中不存在的方法時就會自動呼叫
處理一些不存在的錯誤呼叫
這個方法需要兩個引數
<?php //定義乙個類「人們」
class person
function getcountry()
function say(),我的年齡:,我的性別:。
"; }
protected function eat()
function run()
//處理一些不存在的錯誤呼叫
//就會在呼叫乙個物件中不存在的方法時就會自動呼叫
function __call($methodname,$args)(引數:";
print_r($args);
echo ")不存在
"; }
//宣告靜態的方法
static function hello()
}$p=new person("張三",20,"女");
$p->test(10,20,30);
$p->demo("aa","bb");
$p->say();
?>
__tostring()
直接輸出物件引用的時候自動呼叫,用來快速獲取字串表示的最快捷的方法
<?php //定義乙個類「人們」
class person
function say(),我的年齡:,我的性別:。
"; }
function __tostring()
".self::run;
}}$p=new person("張三",21,"女");
echo $p;
?>
__clone()
轉殖物件使用clone()處理
原本(原來的物件)
複本(複製出來的物件)
__clone()就是在轉殖物件時自動呼叫的方法
只要乙個物件一建立,就要有初始化的動作,和構造方法__constuct作用相似
在__clone()方法中的$this關鍵字代表的是複本的物件,$that代表原本物件
<?php //定義乙個類「人們」
class person
function say(),我的年齡:,我的性別:。
"; }
function __clone()
function __destruct()
}$p=new person("張三",21,"女");
$p->say();
//這並不能叫做轉殖物件,因為在析構時只析構一次
/*$p1=$p;
$p1->name="李四";
$p1->say();*/
$p1= clone $p;
$p1->say();
?>
__autoload()
注意:其它的魔術方法都是在類中新增起作用,這是唯一乙個不在類中新增的方法
只要在頁面中使用到乙個類,只要用到類名,就會自動將這個類名傳給這個引數
<?php function __autoload(www.cppcns.com$classname)
$o=new one;
$o->fun1();
$t=new two;
$t->fun2();
$h=new three;
$h->fun3();
?>
test裡的檔案
one.class.php
<?php class one
}?>
two.class.php
<?php class two
}?>
three.class.php
<?php class three
}?>
物件序列化(序列化):將乙個物件轉為二進位制串(物件是儲存在記憶體中的,容易釋放)
使用時間:
1.將物件長時間儲存在資料庫或檔案中時
2.將物件在多個php檔案中傳輸時
serialize(); 引數是乙個物件,返回來的就是序列化後的二進位制串
unserialize(); 引數就是物件的二進位制串,返回來的就是新生成的物件
__sleep()
是在序列化時呼叫的方法
作用:就是可以將乙個物件部分序列化
只要這個方法中返回乙個陣列,陣列中有幾個成員屬性就序列化幾個成員屬性,如果不加這個方法,則所有成員都被序列化
__wakeup()
是在反序列化時呼叫的方法
也是物件重新誕生的過程
<?php //定義乙個類「人們」
class person
function say(),我的年齡:,我的性別:。
"; }
function __clone()
//是在序列化時呼叫的方法,可以部分序列化物件
function __sleep()
//是在反序列化時呼叫的方法,也是物件重新誕生的過程。可以改變裡面的值
function __wakeup()
function __destruct()
}?>
read.php
<?php require "11.php";
$str=file_get_contents("mess.txt");
$p=unserialize($str);
echo $p->say();
?>
write.php
<?php require "11.php";
$p=new person("張三",18,"男");
$str=serialize($p);
file_put_contents("mess.txt",$str);
?>
本文標題: 詳談php物件導向中常用的關鍵字和魔術方法
本文位址:
php物件導向(OOP) final關鍵字
這個關鍵字只能用來定義 類和定義 方法,不能使用final這個關鍵字來定義成員屬性,因為final是常量的意思,我們在php裡定義常量使用的是define 函式,所以不能使用final來定義成員屬性。使用final關鍵標記的類不能被繼承 final class person class studen...
PHP 物件導向程式設計 常見的關鍵字
目的 一是為了安全,二是沒必要被繼承或重寫 例項 demo.class.php final關鍵字修飾的類,是最終的類不能被繼承 final class demo class demo1 extends demo d1 new demo1 報錯 d1 say 報錯 格式 類 靜態屬性 類 靜態方法 格...
PHP的物件導向
oop object oriented programming 物件導向程式設計.也可以稱為oo.類 某一類事物的資訊和對其操作資訊的集合,也就是屬性和方法 物件 具體到這一類事物的某一 個體 下面oo部分裡的person就是乙個類,而 surfchen就是乙個 個體 我現在就以操作個人資訊作為乙個...