詳談PHP物件導向中常用的關鍵字和魔術方法

2022-10-06 08:36:09 字數 4272 閱讀 9679

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就是乙個 個體 我現在就以操作個人資訊作為乙個...