PHP中常用的關(guān)鍵字
在PHP中包含了很多對函數(shù)和類進行限制的關(guān)鍵字,常用的通常有abstract,final,interface,public,protected,private,static等等,下面我們就將對這些進行分析整理各個的用法。
變量與方法的關(guān)鍵字public,private,protected
public的權(quán)限最大,既可以讓子類使用,也可以支持實例化之后的調(diào)用,
protected表示的是受保護的,訪問的權(quán)限是只有在子類和本類中才可以被訪問到
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; // 這行能被正常執(zhí)行
//echo $obj->protected; // 這行會產(chǎn)生一個致命錯誤
//echo $obj->private; // 這行也會產(chǎn)生一個致命錯誤
$obj->printHello(); // 輸出 Public、Protected 和 Private
$obj->pro_test();//直接報錯
?>
變量與方法的關(guān)鍵字static
static的作用就是能夠?qū)崿F(xiàn)值或者方法在類中不需實例化的情況下調(diào)用,同時static修飾的變量具有與值存儲的功能,例如我們不使用static運行的結(jié)果如下:
?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這樣做的好處,那么我們就先來假設(shè)一下讀者也熟悉JS,在JS中是沒有static這個關(guān)鍵字的,所以如果我們要來實現(xiàn)一個具有能夠保存每一次程序運算結(jié)果作為下一次運算的依據(jù)的一個程序我們需要這樣來寫。
var glo=0;
function test(){
glo++;
document.writeln(glo);
}
test();
test();
test();
這樣就會把glo泄漏到全局變量中,如果生成的變量比較多,就會導(dǎo)致內(nèi)存泄露(內(nèi)存泄漏所指代的就是變量占用過多的內(nèi)存空間沒有別釋放)
script>
var glo=0;
function test(){
glo++;
document.writeln(glo);
}
test();// 1
test();// 2
test();// 3
/script>
所以相比于在沒有定義static的語言中,它具有一個優(yōu)勢是保持變量,不泄露內(nèi)存,也不容易導(dǎo)致全局變量被誤用(因為作用域不在全局)
$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與方法的關(guān)鍵字final
final只能夠用來修飾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";
}
}
特殊關(guān)鍵字interface,abstract
interface的意義在于規(guī)范編程的風(fēng)格,設(shè)想一下就是如果是實現(xiàn)了一個接口那么我們在使用這個接口類的時候就必須要實現(xiàn)里面的方法,起到了統(tǒng)一命名的作用。
class是可以多繼承接口的,接口與接口之間的單繼承是通過extends來實現(xiàn)的,class與接口之間的關(guān)系確立是通過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中所有的方法都是必須要實現(xiàn)的,但是在abstract修飾的類中,可以有一個或者是多個的abstract修飾方法,所以我們可以這樣理解,interface就是abstract的一種特殊情況(當所有的方法都是抽象方法,都是必須要實現(xiàn)的)。abstract有以下的這些特征:
1. 只要類中有至少一個方法使用了abstract關(guān)鍵字,那么這個類是abstract,要加上相應(yīng)的關(guān)鍵字
2. 抽象方法,只有方法的聲明部分,沒有方法體。
但是在我看來,abstract在實際的應(yīng)用中有這樣的幾種場景
1. 多人編程的時候規(guī)范公共部分的命名規(guī)則(不做任何說明,原理跟interface一樣)
2. 實現(xiàn)不讓父級直接實例化使用
樣式代碼如下:
?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等關(guān)鍵字的用法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:- PHP abstract與interface之間的區(qū)別
- 深入解讀php中關(guān)于抽象(abstract)類和抽象方法的問題分析
- PHP abstract 抽象類定義與用法示例
- PHP 抽象方法與抽象類abstract關(guān)鍵字介紹及應(yīng)用
- PHP 面向?qū)ο?final類與final方法
- php類中的$this,static,final,const,self這幾個關(guān)鍵字使用方法
- PHP面向?qū)ο蟮倪M階學(xué)習(xí)(抽像類、接口、final、類常量)
- php中final關(guān)鍵字用法分析
- php中static靜態(tài)變量的使用方法詳解
- php面向?qū)ο笾衧tatic靜態(tài)屬性和靜態(tài)方法的調(diào)用
- PHP中的靜態(tài)變量及static靜態(tài)變量使用詳解
- PHP中abstract(抽象)、final(最終)和static(靜態(tài))原理與用法詳解