国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

PHP基礎之類和對象1——簡介及基本概念

瀏覽:4日期:2022-09-14 17:09:57
一、簡介

自 PHP 5 起完全重寫了對象模型以得到更佳性能和更多特性。這是自 PHP 4 以來的最大變化。PHP 5 具有完整的對象模型。PHP 5 中的新特性包括訪問控制,抽象類和?final?類與方法,附加的魔術方法,接口,對象復制和類型約束。PHP 對待對象的方式與引用和句柄相同,即每個變量都持有對象的引用,而不是整個對象的拷貝。

二、基本概念1.class

每個類的定義都以關鍵字?class?開頭,后面跟著類名,后面跟著一對花括號,里面包含有類的屬性與方法的定義。類名可以是任何非 PHP?保留字的合法標簽。一個合法類名以字母或下劃線開頭,后面跟著若干字母,數字或下劃線。以正則表達式表示為:[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*。一個類可以包含有屬于自己的常量,變量(稱為“屬性”)以及函數(稱為“方法”)。Example #1 簡單的類定義

<?php class SimpleClass {//聲明屬性public $var = ’1’;//聲明方法public function displayVar(){ echo $this->var;} }?>

當一個方法在類定義內部被調用時,有一個可用的偽變量 $this。$this 是一個到主叫對象的引用(通常是該方法所從屬的對象,但如果是從第二個對象靜態調用時也可能是另一個對象)。Example #2 $this 偽變量的示例

<?php class A {function foo(){ if(isset($this)){echo ’$this is defined (’;echo get_class($this);echo ’)<br>’; }else{echo ’$this is not defined.<br>’; }} } class B {function bar(){ //如果開啟了E_STRICT這一行會有警告提示 A::foo();} } $a = new A(); $a -> foo(); //如果開啟了E_STRICT這一行會有警告提示 A::foo(); $b = new B(); $b -> bar(); //如果開啟了E_STRICT這一行會有警告提示 B::bar();?>

輸出結果:

$this is defined (A)$this is not defined.$this is defined (B)$this is not defined.2.new

要創建一個類的實例,必須使用?new?關鍵字。當創建新對象時該對象總是被賦值,除非該對象定義了構造函數并且在出錯時拋出了一個異常。類應在被實例化之前定義(某些情況下則必須這樣)。如果在?new?之后跟著的是一個包含有類名的字符串,則該類的一個實例被創建。如果該類屬于一個名字空間,則必須使用其完整名稱。Example #3 創建一個實例

<?php $instance = new SimpleClass(); //也可以這樣做: $className = 'Foo'; $instance = new $className(); //Foo()?>

在類定義內部,可以用?new self?和?new parent?創建新對象。當把一個對象已經創建的實例賦給一個新變量時,新變量會訪問同一個實例,就和用該對象賦值一樣。此行為和給函數傳遞入實例時一樣。可以用克隆給一個已創建的對象建立一個新實例。Example #4 對象賦值

include_once(’class1.php’);$instance = new SimpleClass();$assigned = $instance;$reference = & $instance;$instance -> var = ’$assigned will have this value’;$instance = null; //$instance和$reference變成nullvar_dump($instance);var_dump($reference);var_dump($assigned);

輸出結果是:

NULLNULLobject(SimpleClass)#1 (1) { ['var']=> string(30) '$assigned will have this value' }

PHP 5.3.0 引進了兩個新方法來創建一個對象的實例:

class Test{ static public function getNew() {return new static; }}class Child extends Test{}$obj1 = new Test();$obj2 = new $obj1;var_dump($obj1 !== $obj2);$obj3 = Test::getNew();var_dump($obj3 instanceof Test);$obj4 = Child::getNew();var_dump($obj4 instanceof Child);

輸出結果:

bool(true)bool(true)bool(true)3.extends

一個類可以在聲明中用?extends?關鍵字繼承另一個類的方法和屬性。PHP不支持多重繼承,一個類只能繼承一個基類(與java一樣都是單繼承)。被繼承的方法和屬性可以通過用同樣的名字重新聲明被覆蓋。但是如果父類定義方法時使用了?final,則該方法不可被覆蓋。可以通過?parent::?來訪問被覆蓋的方法或屬性。當覆蓋方法時,參數必須保持一致否則 PHP 將發出?E_STRICT?級別的錯誤信息。但構造函數例外,構造函數可在被覆蓋時使用不同的參數。Example #6 簡單的類繼承

class ExtendClass extends SimpleClass{ //重寫父類的方法 function displayVar() {echo 'Extending class<br>';parent::displayVar(); }}$extended = new ExtendClass();$extended -> displayVar();

輸出結果:

Extending class14.::class

自 PHP 5.5 起,關鍵詞?class?也可用于類名的解析。使用?ClassName::class?你可以獲取一個字符串,包含了類?ClassName?的完全限定名稱。這對使用了?命名空間?的類尤其有用。Example #7 類名的解析

namespace NS{ class ClassName{} echo ClassName::class;}

輸出結果:

NSClassName

標簽: PHP
相關文章:
主站蜘蛛池模板: 精品国产一区二区三区久 | 成人观看免费大片在线观看 | 曰本aaaaa毛片午夜网站 | 日本一区二区三区四区公司 | 日韩乱码中文字幕视频 | 欧美精品另类hdvideo | 久热香蕉在线视频 | 国产三级做爰在线观看∵ | 久久久精品一区 | 亚洲国产欧美自拍 | 国产草草影院 | 福利三区 | 日本精品一在线观看视频 | 国产一区二区三区在线免费观看 | 在线欧洲成人免费视频 | 男女视频在线观看免费高清观看 | 日韩免费一区二区三区在线 | 欧美日韩免费一区二区三区 | 国产精品青草久久久久福利99 | 国产精品情侣久久婷婷文字 | 国产欧美亚洲精品 | 久久国产成人精品麻豆 | 韩国毛片视频 | 亚洲精品色综合色在线观看 | 欧美亚洲国产成人综合在线 | 亚洲精品国产拍拍拍拍拍 | 欧美亚洲国产成人高清在线 | 美女网站在线观看视频18 | 亚洲视频免 | 99精品视频在线免费观看 | 国产精品久久久久久久久久直 | 国产成人精品一区二区三区 | 日本久久99 | 欧美色欧美亚洲高清在线视频 | 青青操网站 | a级国产乱理伦片在线观看国 | 日本道色| 久久精视频 | 黄色网点| 一本一道波多野结衣456 | 成人在线高清 |