下面小編就為大家分享一篇詳談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 ?>這裡可能不能夠體會到PHP這樣做的好處,那麼我們就先來假設一下讀者也熟悉JS,在JS中是沒有static這個關鍵字的,所以如果我們要來實現一個具有能夠保存每一次程序運算結果作為下一次運算的依據的一個程序我們需要這樣來寫。
var glo=0; function test(){ glo++; document.writeln(glo); } test(); test(); test();這樣就會把glo洩漏到全域變數中,如果產生的變數比較多,就會導致記憶體外洩(記憶體洩漏所指涉的就是變數佔用過多的記憶體空間沒有別釋放)
<script> var glo=0; function test(){ glo++; document.writeln(glo); } test();// 1 test();// 2 test();// 3 </script>#所以比起在沒有定義static的語言中,它有一個優點是保持變量,不洩漏內存,也不容易導致全域變數被誤用(因為作用域不在全域)
$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中public,private,protected,abstract等關鍵字的用法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持php中文網。 您可能感興趣的文章:
PHP讓陣列中有相同值的組成新的陣列實例講解
#命令列執行php腳本中的$argv與$argc設定方法_php實例
#
以上是詳談PHP中public,private,protected,abstract等關鍵字的相關用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6
視覺化網頁開發工具

WebStorm Mac版
好用的JavaScript開發工具