日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php 类学习,php的类学习(一)

發(fā)布時間:2023/12/10 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 类学习,php的类学习(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

function __autoload($class_name){

//require_once語句在腳本執(zhí)行期間包含并運行指定文件。此行為和 require()語句完全相同,唯一區(qū)別是如果該文件中的代碼已經(jīng)被包含了,則不會再次包含

require_once $class_name . '.php';

}

$obj =new testAAA();

$obj2=new type();

?>

類的屬性

1)類的變量成員叫做“屬性”,或者叫“字段”、“特征”,在本文檔統(tǒng)一稱為“屬性”。

2)屬性聲明是由關(guān)鍵字public或者protected或者 private開頭,然后跟一個變量來組成

3)屬性中的變量可以初始化,但是初始化的值必須是常數(shù),這里的常數(shù)是指php腳本在編譯階段時就為常數(shù),而不是在編譯階段之后在運行階段運算出的常數(shù)。說明:為了兼容php4,php5聲明屬性依然可以直接使用關(guān)鍵字var,或者放在public,

4)在類的成員方法里面,可以通過$this->property(property是屬性名字)這種方式來訪問類的屬性、 方法.

5)要訪問類的靜態(tài)屬性或者在靜態(tài)方法里面卻不能使用訪問屬性的方法,而是使用self::$property

6)在類的非靜態(tài)方法里面可以使用偽變量$this,這個偽變量是調(diào)用該方法的實例化對象引用protected, or private之前。但是var并不是必須的。<?php

class SimpleClass{

//錯誤的屬性聲明

// public $var1='hello'.' World';

// public $var2=<<

//hello world

//EO;

// public $var3=1+2;

// public $var4=self::myStaticMethod();

// public $var5=$myvar;

//正確的屬性聲明

public $var6=myConstant;

public $var7=array(true,false);

//在php5.3.0及其以后,下面的聲明也正確

public $var8=<<

hello world

EOD;

}

?>

類常量

們可以在類中定義常量。常量的值將始終保持不變。在定義和使用常量的時候不需要使用$符號。常量的值必須是一個定值<?php

class ConstantClass{

const constant='常量值';

function showConstant(){

echo self::constant."
";

}

}

echo ConstantClass::constant."
";//相當(dāng)于java中的ClassName.屬性名

$classname="ConstantClass";

// echo $classname::constant,"
";//php5.3以后才有這種,相當(dāng)于java中的ClassName.屬性名,不過將ClassName動態(tài)化了,加上命名空間報錯

$class=new ConstantClass();

$class->showConstant();

echo $class::constant."
";//php5.3以后

?>

自動加載對象

很多開發(fā)者寫面向?qū)ο蟮膽?yīng)用程序時對每個類的定義建立一個 PHP 源文件。一個很大的煩惱是不得不在每個腳本(每個類一個文件)開頭寫一個長長的包含文件列表。

在 PHP 5 中,不再需要這樣了。可以定義一個 __autoload 函數(shù),它會在試圖使用尚未被定義的類時自動調(diào)用。通過調(diào)用此函數(shù),腳本引擎在 PHP 出錯失敗前有了最后一個機會加載所需的類。

注意: autoload前面是兩個下劃線

1)在__autoload函數(shù)中拋出的異常不能陪catch語句塊捕獲,會導(dǎo)致致命錯誤

2)如果使用php的CLI交互模式時,Autoloading不存在<?php

function __autoload($class_name){

//require_once語句在腳本執(zhí)行期間包含并運行指定文件。此行為和 require()語句完全相同,唯一區(qū)別是如果該文件中的代碼已經(jīng)被包含了,則不會再次包含

require_once $class_name . '.php';

}

$obj =new testAAA();

$obj2=new type();

?>

在testAAA.php文件中<?php

class testAAA{

function testAAA()

{

echo "加載了".get_class($this);

}

}

?>

在type.php文件中<?php

class type{

function type(){

echo "加載了".get_class($this);

}

}

?>

構(gòu)造函數(shù)

void __construct(...)

PHP 5 允行開發(fā)者在一個類中定義一個方法作為構(gòu)造函數(shù)。具有構(gòu)造函數(shù)的類會在每次創(chuàng)建新對象時先調(diào)用此方法,所以非常適合在使用對象之前做一些初始化工作。

注意:如果子類中定義了構(gòu)造函數(shù)則不會隱式調(diào)用其父類的構(gòu)造函數(shù)。要執(zhí)行父類的構(gòu)造函數(shù),需要在子類的構(gòu)造函數(shù)中調(diào)用 parent::__construct()。<?php

class BaseClass{

function __construct(){

//如果是子類調(diào)用該方法,get_class()返回的是子類的名稱

//echo get_class($this)."初始化了
";

echo "BaseClass初始化了
";

}

}

class SubClass extends BaseClass{

function __construct(){

parent::__construct();//默認(rèn)不調(diào)用父類的構(gòu)造函數(shù),調(diào)用父類的構(gòu)造函數(shù)方法

echo get_class($this)."初始化了
";//有命名空間的情況下打印出來的:Base\SubClass初始化了,無:SubClass初始化了

}

}

$obj=new BaseClass();

$obj=new SubClass();

class TreeClass{

function TreeClass(){//當(dāng)有__construct方法時,這個不執(zhí)行的

echo get_class($this)."初始化了
";

}

// function __construct(){//沒有命名空間的時候,兩個不能同時出現(xiàn)

// echo "ac初始化了
";

// }

}

$obj=new TreeClass();

class fourClass{

function fourClass(){//定義了命名空間原始的

echo get_class($this)."初始化了
";

}

}

$obj=new fourClass();

?>

注意:為了實現(xiàn)向后兼容性,如果 PHP 5 在類中找不到 __construct()函數(shù),它就會嘗試尋找舊式的構(gòu)造函數(shù),也就是和類同名的函數(shù)。因此唯一會產(chǎn)生兼容性問題的情況是:類中已有一個名為 __construct() 的方法,但它卻又不是構(gòu)造函數(shù)。

析構(gòu)函數(shù)

void __destruct ( void )

PHP 5 引入了析構(gòu)函數(shù)的概念,這類似于其它面向?qū)ο蟮恼Z言,如 C++。析構(gòu)函數(shù)會在到某個對象的所有引用都被刪除或者當(dāng)對象被顯式銷毀時執(zhí)行。<?php

class MyDestructClass{

function __construct(){

print "MyDestructClass初始化了
";

$this->name="MyDestructClass";

}

function __destruct(){//全部解析完以后才執(zhí)行該方法

print "Destroying".$this->name."
";

}

}

$obj=new MyDestructClass();

?>

和構(gòu)造函數(shù)一樣,父類的析構(gòu)函數(shù)不會被引擎暗中調(diào)用。要執(zhí)行父類的析構(gòu)函數(shù),必須在子類的析構(gòu)函數(shù)體中顯式調(diào)用 parent::__destruct()。

析構(gòu)函數(shù)即使在使用exit()終止腳本運行時也會被調(diào)用。在析構(gòu)函數(shù)中 調(diào)用exit()將會中止其余關(guān)閉操作的運行。

訪問控制

對屬性或方法的訪問控制,是通過在前面添加關(guān)鍵字 public、protected 或 private 來實現(xiàn)的。由 public 所定義的類成員可以在任何地方被訪問;由 protected 所定義的類成員則可以被其所在類的子類和父類訪問(當(dāng)然,該成員所在的類也可以訪問);而由 private 定義的類成員則只能被其所在類訪問。

對類成員的訪問控制

類成員都必須使用關(guān)鍵字public、protected 或 private 進(jìn)行定義

注意:為了兼容性考慮,在 PHP 4 中使用 var 關(guān)鍵字對變量進(jìn)行定義的方法在 PHP 5 中仍然有效(只是作為 public 關(guān)鍵字的一個別名)。在 PHP 5.1.3 之前的版本,該語法會產(chǎn)生一個 E_STRICT 警告。

對方法的訪問控制

類中的方法都必須使用關(guān)鍵字public、protected 或 private 進(jìn)行定義。如果沒有設(shè)置這些關(guān)鍵字,則該方法會被設(shè)置成默認(rèn)的 public。

對象繼承

繼承已為大家所熟知的一個程序設(shè)計特性,PHP 的對象模型也使用了繼承。繼承將會影響到類與類,對象與對象之間的關(guān)系。

比如,當(dāng)擴(kuò)展一個類,子類就會繼承父類的所有公有和保護(hù)方法。但是子類的方法會覆蓋父類的方法。

繼承對于功能的設(shè)計和抽象是非常有用的,而且對于類似的對象增加新功能就無須重新再寫這些公用的功能。

范圍解析操作符(::)

范圍解析操作符(也可稱作 Paamayim Nekudotayim)或者更簡單地說是一對冒號,可以用于訪問靜態(tài)成員、方法和常量,還可以用于覆蓋類中的成員和方法。

1)當(dāng)在類的外部訪問這些靜態(tài)成員、方法和常量時,必須使用類的名字。

2)self 和 parent這兩個特殊的關(guān)鍵字是用于在類的內(nèi)部對成員或方法進(jìn)行訪問的。

3)當(dāng)一個子類覆蓋其父類中的方法時,PHP 不會再執(zhí)行父類中已被覆蓋的方法,直到子類中調(diào)用這些方法為止。這種機制也作用于 構(gòu)造函數(shù)和析構(gòu)函數(shù)、重載 及 魔術(shù) 函數(shù)。<?php

class MyClass

{

const CONST_VALUE = '常量值';

protected function myFunc() {

echo "MyClass::myFunc()
";

}

}

class OtherClass extends MyClass

{

// 覆蓋父類中的方法

public function myFunc()

{

// 但仍然可以調(diào)用已被覆蓋的方法

parent::myFunc();

echo "OtherClass::myFunc()
";

}

public static $my_Static="靜態(tài)值";

public static function doubleColon(){

echo parent::CONST_VALUE."
";

}

}

echo MyClass::CONST_VALUE,"
";

OtherClass::doubleColon();

$class = new OtherClass();

$class->myFunc();

?>

總結(jié)

以上是生活随笔為你收集整理的php 类学习,php的类学习(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。