下面小編就為大家分享一篇詳談PHP中public,private,protected,abstract等關鍵字的用法,具有很好的參考價值,希望對大家有所幫助。一起跟著小編過來看看吧
PHP中常用的關鍵字
在PHP中包含了很多對函數和類別進行限制的關鍵字,常用的通常有abstract,final,interface,public,protected,private,static等等,下面我們就將對這些進行分析整理各個的用法。
變數與方法的關鍵字public,private,protected
#public的權限最大,既可以讓子類別使用,也可以支持實例化之後的調用,
protected表示的是受保護的,存取的權限是只有在子類別和本類別中才可以被存取到
private 表示的是私有,只能夠是在目前的類別中可以被存取到
<?php // /** * Define MyClass */ class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; public function printHello() { echo $this->public; echo $this->protected; echo $this->private; } protected function pro_test(){ var_dump(1); } } $obj = new MyClass(); echo $obj->public; // 这行能被正常执行 //echo $obj->protected; // 这行会产生一个致命错误 //echo $obj->private; // 这行也会产生一个致命错误 $obj->printHello(); // 输出 Public、Protected 和 Private $obj->pro_test();//直接报错 ?>
#變數與方法的關鍵字static
static的作用是能夠實現值或方法在類別中不需實例化的情況下調用,同時static修飾的變數具有與值儲存的功能,例如我們不使用static運行的結果如下:
<?php function test(){ $var=1; echo $var."</br>"; $var++; } test();// 1 test();// 1 test();// 1 ?>
如果我們給變數加上static那麼就會變成這樣
##
<?php function test(){ static $var=1; echo $var."</br>"; $var++; } test();// 1 test();// 2 test();// 3 ?>
var glo=0; function test(){ glo++; document.writeln(glo); } test(); test(); test();
<script> var glo=0; function test(){ glo++; document.writeln(glo); } test();// 1 test();// 2 test();// 3 </script>
$age=0; $age++; function test1() { static $age = 100; $age++; echo $age."</br>"; } function test2() { static $age = 1000; $age++; echo $age."</br>"; } test1(); // 101 test2(); // 1001
##class與方法的關鍵字finalfinal只能夠用來修飾class與function,使用了final之後就不能夠被繼承,例如如下的程式碼就會直接報錯
class BaseClass { public $public = 'Public'; function test() { echo "BaseClass::test() called\n"; } final public function moreTesting() { echo "BaseClass::moreTesting() called\n"; } } class ChildClass extends BaseClass { public function moreTesting() { echo "ChildClass::moreTesting() called\n"; } }
特殊關鍵字interface,abstract#interface的意義在於規範程式設計的風格,設想一下就是如果是實現了一個介面那麼我們在使用這個介面類別的時候就必須要實作裡面的方法,就起到了統一命名的作用。
class是可以多繼承介面的,介面與介面之間的單一繼承是透過extends來實現的,class與介面之間的關係確立是透過implements
範例程式碼:
<?php interface testA{ function funcA(); } interface testB{ function funcB(); } interface testC extends testA { function funcC(); } class run implements testC ,testB { public function funcA() { // TODO: Implement funcA() method. } public function funcB() { // TODO: Implement funcB() method. } public function funcC() { // TODO: Implement funcC() method. } } ?>
abstract的作用跟interface其實是一樣的,但是在interface中所有的方法都是必須要實現的,但是在abstract修飾的類別中,可以有一個或多個的abstract修飾方法,所以我們可以這樣理解,interface就是abstract的一種特殊情況(當所有的方法都是抽象方法,都是必須要實現的)。 abstract有以下的這些特徵:
1. 只要類別中有至少一個方法使用了abstract關鍵字,那麼這個類別是abstract,要加上對應的關鍵字
2.抽象方法,只有方法的聲明部分,沒有方法體。
但是在我看來,abstract在實際的應用中有這樣的幾種場景
1. 多人編程的時候規範公共部分的命名規則(不做任何說明,原理跟interface一樣)
2. 實作不讓父級直接實例化使用
樣式程式碼如下:
<?php abstract class shopping { public function buy() { echo "buy"; } public function loan() { echo "loan"; } } class leslieBuy extends shopping { } //$test1=new shopping;//直接语法错误 $leslieSie = new leslieBuy; $leslieSie->loan();//打印出loan ?>
#命令列執行php腳本中的$argv與$argc設定方法_php實例
#
以上是詳談PHP中public,private,protected,abstract等關鍵字的相關用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!