類和對象

有關類和對象的相關知識

類的自動加載

自動加載就是引入的文件放入,只要輸入類名就能夠實現引入文件中的方法,從而減小了工做量和代碼量php

作法1:使用__autoload魔術函數

例子:sql

function __autoload($MysqlDB){數據庫

require($MysqlDB.".class.php");數組

}函數

作法2:使用spl_autoload_register函數

做用是:代替__autoload函數,能夠應文件分佈多個目錄中的狀況ui

語法:spa

spl_autoload_regist(「函數名1」);scala

spl_autoload_regist(「函數名2」);對象

 

對象的複製(克隆)clone

主要克隆對象中的「非對象非資源」數據繼承

淺克隆:

只能克隆對象中的「非對象非資源」數據:

 

深克隆:

人爲的去複製潛克隆複製不了的數據

這樣的話就須要對該對象類使用魔術方法:

__clone()

 

對象遍歷

使用的是foreach語句進行遍歷

注意:1,只能遍歷看獲得的「屬性」,並且必須在類裏面

若是要所有遍歷,例子以下:

 

若是隻獲取兩個屬性的數據,那麼操做以下:

 

PHP內置標準類

內部沒有定義任何屬性,可是該類的屬性可使用,只適合純字符下標數組

 

標量數據轉換爲對象:屬性名爲固定的scalar」,值爲該變量的值

類型約束:

只能將必須指定的類型存儲在該相對應的類型數據中

int  n1 = 1; //int整數類型變量

float  f1 ; //float小數類型變量

bool  function  getConcat( string  s1, string  s2){。。。。} //兩個形參是string,返回值也是bool

 

對函數(或方法)的參數設定必須使用的類型。只能對對象,接口,數組和函數進行約束,以下所示:

function f1(類名 $p1){....}:參數只能使用該類的對象;

function f1(接口名 $p1){....}:參數只能使用實現該接口的對象;

function f1(array $p1){....}:參數只能使用數組;

function f1(callable $p1){....}:參數只能是一個函數或方法,也叫回調函數(方法)

 與類有關的魔術常量

__CLASS__,:獲取其所在的類的類名。

__METHOD__:獲取其所在的方法的方法名。

echo __CLASS__ //輸出「A

echo __METHOD__//輸出「f1

//注意:get_class()也能夠獲得類名,但其必須有個「對象」

 

 

序列化的作法:

 

1$str = serialize($變量); //此時該變量的數據就變成了字符串,並存入變量$str1;

 

但一般的應用出,此時就應該將其保存爲文件(或數據庫),以下:

 

2file_put_contents(「文本文件路徑」,   $str);

 

 

 

反序列化操做:

 

3$str = file_get_contents(「文本文件路徑」); //先從文本文件中取得內容

 

4$v1 = unserialize( $str); //反序列化,此時$v1這個變量中存儲的就是原來變量內容(和類型)

 

用到的描述方法有:

 

__sleep() __wakeup()

 

__sleep()方法中能夠進行一些數據(資源)的清理工做,並返回一個數組,該數組能夠存儲一些想要進行序列化的對象的屬性——便可以挑選屬性進行序列化。

 

 

 

__wakeup()方法中,能夠在進行反序列化操做的時候進行某些有用的「數據恢復工做」,好比:鏈接數據庫

 

這是「序列化」對象:

__tostring()方法

轉換爲字符串的方法

__invoke()方法

對象看成一個「方法」(函數)的時候,會自動調用該魔術方法。

 

一些有關類和對象的系統函數和運算符

 

class_exists(), :判斷某個類是否存在(定義過)

 

interface_exists(), :判斷接口是否存在

 

get_class():獲取某個對象的「所屬類名」

 

get_parent_class(), :獲取某個對象的「所屬父類的類名」

 

get_class_methods(), :獲取一個類的全部方法,返回一個索引數組,就是這些方法的名字。

 

get_class_vars(), :獲取一個類的全部屬性,返回一個數組,下標爲屬性名,值爲屬性值。

 

get_declared_classes():得到全部聲明過的類(含系統中的類)

 

is_object():判斷是否對象

 

get_object_vars():得到對象的全部屬性,返回一個數組,下標爲屬性名,值爲屬性值

 

運算符:

 

new

 

instanceof: 判斷一個對象是不是某個類的「實例」

 

面向對象3大思想特徵介紹:

封裝:把數據私有化,封閉起來 private

繼承:子類繼承父類的屬性和方法

多態:一個對象相同的東西獲得的結果不一樣

相關文章
相關標籤/搜索