Keywords in Part 4 of the Object-Oriented Series for Front-end Learning PHP
Nov 16, 2016 am 10:24 AM前面的話
php實現(xiàn)面向?qū)ο蟮囊粋€顯著特征是大量使用關(guān)鍵字,本文將詳細介紹關(guān)鍵字
?
public
public表示公有,它具有最大的訪問權(quán)限,被定義為公有的類成員可以在任何地方被訪問
如果屬性用 var 定義,則被視為公有,如果方法沒有設(shè)置關(guān)鍵字,則該方法默認為公有
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> demo{ </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$public</span> = 1<span style="color: #000000;">; </span><span style="color: #0000ff;">function</span> test(<span style="color: #800080;">$var</span><span style="color: #000000;">){ </span><span style="color: #0000ff;">echo</span> "{<span style="color: #800080;">$var</span>}000"<span style="color: #000000;">; } } </span><span style="color: #800080;">$d1</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> demo; </span><span style="color: #800080;">$d1</span>->test(<span style="color: #800080;">$d1</span>-><span style="color: #0000ff;">public</span>);<span style="color: #008000;">//</span><span style="color: #008000;">1000</span> ?>
?
protected
protected表示受保護的,被定義為受保護的類成員則可以被其自身以及其子類和父類訪問
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> demo{ </span><span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> fn(){ </span><span style="color: #0000ff;">echo</span> '111'<span style="color: #000000;">; } } </span><span style="color: #0000ff;">class</span> demo1 <span style="color: #0000ff;">extends</span><span style="color: #000000;"> demo{ </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> test(){ parent</span>::<span style="color: #000000;">fn(); } } </span><span style="color: #800080;">$d1</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> demo1; </span><span style="color: #800080;">$d1</span>->test();<span style="color: #008000;">//</span><span style="color: #008000;">111</span> ?>
?
private
private表示私有的,被定義為私有的類成員則只能被其定義所在的類訪問
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> demo{ </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$private</span> = 1<span style="color: #000000;">; </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> test(){ </span><span style="color: #0000ff;">echo</span>(<span style="color: #800080;">$this</span>-><span style="color: #0000ff;">private</span><span style="color: #000000;">); } } </span><span style="color: #800080;">$d1</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> demo; </span><span style="color: #800080;">$d1</span>->test();<span style="color: #008000;">//</span><span style="color: #008000;">1</span> ?>
?
final
PHP5新增了final關(guān)鍵字,它只能用來修飾類和方法,不能使用final這個關(guān)鍵字來修飾成員屬性,因為final是常量的意思,我們在PHP里定義常量使用的是define()函數(shù)和const關(guān)鍵字,所以不能使用final來定義成員屬性
如果父類中的方法被聲明為final,則子類無法覆蓋該方法。如果一個類被聲明為 final,則不能被繼承
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> BaseClass { </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> test() { </span><span style="color: #0000ff;">echo</span> "BaseClass::test() called\n"<span style="color: #000000;">; } </span><span style="color: #0000ff;">final</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> moreTesting() { </span><span style="color: #0000ff;">echo</span> "BaseClass::moreTesting() called\n"<span style="color: #000000;">; } } </span><span style="color: #0000ff;">class</span> ChildClass <span style="color: #0000ff;">extends</span><span style="color: #000000;"> BaseClass { </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> moreTesting() { </span><span style="color: #0000ff;">echo</span> "ChildClass::moreTesting() called\n"<span style="color: #000000;">; } } </span><span style="color: #008000;">//</span><span style="color: #008000;"> Results in Fatal error: Cannot override final method BaseClass::moreTesting()</span> ?>
?
static
static關(guān)鍵字表示靜態(tài)的意思,用于修飾類的成員屬性和成員方法(即為靜態(tài)屬性和靜態(tài)方法)
類中的靜態(tài)屬性和靜態(tài)方法不用實例化(new)就可以直接使用類名訪問
[注意]靜態(tài)屬性不能通過一個類已實例化的對象來訪問,但靜態(tài)方法可以
由于靜態(tài)方法不需要通過對象即可調(diào)用,所以偽變量 $this 在靜態(tài)方法中不可用,靜態(tài)屬性不可以由對象通過 -> 操作符來訪問
用靜態(tài)方式調(diào)用一個非靜態(tài)方法會導(dǎo)致一個 E_STRICT 級別的錯誤
就像其它所有的 PHP 靜態(tài)變量一樣,靜態(tài)屬性只能被初始化為文字或常量,不能使用表達式。所以可以把靜態(tài)屬性初始化為整數(shù)或數(shù)組,但不能初始化為另一個變量或函數(shù)返回值,也不能指向一個對象
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Foo { </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #800080;">$my_static</span> = 'foo'<span style="color: #000000;">; </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> staticValue() { </span><span style="color: #0000ff;">return</span> self::<span style="color: #800080;">$my_static</span><span style="color: #000000;">; } } </span><span style="color: #0000ff;">class</span> Bar <span style="color: #0000ff;">extends</span><span style="color: #000000;"> Foo { </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> fooStatic() { </span><span style="color: #0000ff;">return</span> parent::<span style="color: #800080;">$my_static</span><span style="color: #000000;">; } } </span><span style="color: #0000ff;">print</span> Foo::<span style="color: #800080;">$my_static</span> . "\n";<span style="color: #008000;">//</span><span style="color: #008000;">'foo'</span> <span style="color: #800080;">$foo</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Foo(); </span><span style="color: #0000ff;">print</span> <span style="color: #800080;">$foo</span>->staticValue() . "\n";<span style="color: #008000;">//</span><span style="color: #008000;">'foo'</span> <span style="color: #0000ff;">print</span> <span style="color: #800080;">$foo</span>::<span style="color: #800080;">$my_static</span> . "\n";<span style="color: #008000;">//</span><span style="color: #008000;">'foo'</span> <span style="color: #0000ff;">print</span> <span style="color: #800080;">$foo</span>->my_static . "\n"; <span style="color: #008000;">//</span><span style="color: #008000;">報錯 </span> ?>
?
const
可以把在類中始終保持不變的值定義為常量。在定義和使用常量的時候不需要使用$符號,而是使用const
常量的值必須是一個定值,不能是變量,類屬性,數(shù)學(xué)運算的結(jié)果或函數(shù)調(diào)用
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> MyClass { </span><span style="color: #0000ff;">const</span> <span style="color: #008080;">constant</span> = 'constant value'<span style="color: #000000;">; </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> showConstant() { </span><span style="color: #0000ff;">echo</span> self::<span style="color: #008080;">constant</span> . "\n"<span style="color: #000000;">; } } </span><span style="color: #0000ff;">echo</span> MyClass::<span style="color: #008080;">constant</span> . "\n";<span style="color: #008000;">//</span><span style="color: #008000;">'constant value'</span> <span style="color: #800080;">$classname</span> = "MyClass"<span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$classname</span>::<span style="color: #008080;">constant</span> . "\n"; <span style="color: #008000;">//</span><span style="color: #008000;">'constant value'</span> <span style="color: #800080;">$class</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> MyClass(); </span><span style="color: #800080;">$class</span>->showConstant();<span style="color: #008000;">//</span><span style="color: #008000;">'constant value'</span> <span style="color: #0000ff;">echo</span> <span style="color: #800080;">$class</span>::<span style="color: #008080;">constant</span>."\n";<span style="color: #008000;">//</span><span style="color: #008000;">'constant value'</span> ?>
?
this
當(dāng)一個方法在類定義內(nèi)部被調(diào)用時,有一個可用的偽變量this,特殊對象的引用this就是在對象內(nèi)部的成員方法中,代表本對象的一個引用,但只能在對象的成員方法中使用,不管是在對象內(nèi)部使用$this訪問自己對象內(nèi)部成員。還是在對象外部通過對象的引用名稱訪問對象中的成員,都需要使用特殊的運算符“->”來完成訪問
[注意]this在靜態(tài)方法中不可用
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> A { </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> foo() { </span><span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">isset</span>(<span style="color: #800080;">$this</span><span style="color: #000000;">)) { </span><span style="color: #0000ff;">echo</span> '$this is defined ('<span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> <span style="color: #008080;">get_class</span>(<span style="color: #800080;">$this</span><span style="color: #000000;">); </span><span style="color: #0000ff;">echo</span> ")\n"<span style="color: #000000;">; } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> { </span><span style="color: #0000ff;">echo</span> "\$this is not defined.\n"<span style="color: #000000;">; } } } </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> B { </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> bar() { </span><span style="color: #008000;">//</span><span style="color: #008000;"> Note: the next line will issue a warning if E_STRICT is enabled.</span> A::<span style="color: #000000;">foo(); } } </span><span style="color: #800080;">$a</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> A(); </span><span style="color: #800080;">$a</span>->foo();<span style="color: #008000;">//</span><span style="color: #008000;">$this is defined (A) </span> A::foo();<span style="color: #008000;">//</span><span style="color: #008000;">$this is not defined. </span> <span style="color: #800080;">$b</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> B(); </span><span style="color: #800080;">$b</span>->bar();<span style="color: #008000;">//</span><span style="color: #008000;">$this is defined (B) </span> B::bar();<span style="color: #008000;">//</span><span style="color: #008000;">$this is not defined.</span> ?>
?
self
在類的方法中,不能用this來引用靜態(tài)變量或靜態(tài)方法,而需要用self來引用
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> MyClass { </span><span style="color: #0000ff;">const</span> <span style="color: #008080;">constant</span> = 'constant value'<span style="color: #000000;">; </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> showConstant() { </span><span style="color: #0000ff;">echo</span> self::<span style="color: #008080;">constant</span> . "\n"<span style="color: #000000;">; } } </span><span style="color: #800080;">$var</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> MyClass; </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$var</span>->showConstant();<span style="color: #008000;">//</span><span style="color: #008000;">constant value</span> ?>
?
parent
parent用于調(diào)用父類中定義的成員方法或常量
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> MyClass{ </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> fn(){ </span><span style="color: #0000ff;">echo</span>('111'<span style="color: #000000;">); } </span><span style="color: #0000ff;">const</span> A = 'a'<span style="color: #000000;">; } </span><span style="color: #0000ff;">class</span> Class1 <span style="color: #0000ff;">extends</span><span style="color: #000000;"> MyClass{ </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> test(){ </span><span style="color: #0000ff;">echo</span> parent::fn().parent::<span style="color: #000000;">A; } } </span><span style="color: #800080;">$var</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Class1; </span><span style="color: #800080;">$var</span>->test();<span style="color: #008000;">//</span><span style="color: #008000;">111a</span> ?>

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)