亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > PHP面向對象程序設計重載(overloading)操作詳解

PHP面向對象程序設計重載(overloading)操作詳解

熱門標簽:400電話蘭州申請請 開發(fā)地圖標注類網(wǎng)站 廣東廣州在怎么申請400電話 余姚電話機器人 外呼系統(tǒng)能給企業(yè)帶來哪些好處 百度地圖標注偏差 百度地圖怎樣標注圖標 電銷機器人問門薩維品牌my 咸寧銷售電銷機器人系統(tǒng)

本文實例講述了PHP面向對象程序設計重載(overloading)操作。分享給大家供大家參考,具體如下:

重載

PHP中的”重載”與其它絕大多數(shù)面向對象語言不同,只是他們都是用的相同的名詞而已。傳統(tǒng)的”重載”是用于提供多個同名的 類方法,但各方法的參數(shù)類型和個數(shù)不同。 PHP所提供的”重載”(overloading)是指動態(tài)地”創(chuàng)建”類屬性和方法。當調用當前環(huán)境下未定義不可見的類屬性或方法時,重載方法會被調用。是通過魔術方法(magic methods)來實現(xiàn)的。

一般來說,把類中的成員屬性都定義為private的,這更符合現(xiàn)實的邏輯,能夠更好的對類中成員起到保護作用。但是,對成員屬性的讀取和賦值操作是非常頻繁的,而如果在類中為每個私有屬性都定義可以在對象的外部獲取和賦值的公有方法,又是非常非常煩惱的。因此在PHP5.1.0以后的版本中,預定義了兩個方法“__get()”和“__set()”,用來完成對所用私有屬性都能獲取和賦值操作,以及用來檢查私有屬性是否存在的方法“__isset()”和用來刪除對象中私有屬性方法“__unset()”。
通俗一點來說,重載在php中的含義是指,當一個對象或類使用其未定義或不可見的屬性和方法時,其中的一些“處理機制”。

屬性重載

對一個對象不存在的屬性進行使用時,這個類中預先設定好的應對辦法(處理機制)。

屬性,本質就是變量,其只有4個操作:

取值:

當對一個對象不存在(未定義或不可見)的屬性進行“取值”時,就會自動調用方法:__GET()方法不區(qū)分大小寫。

賦值:

當對一個對象不存在(未定義或不可見)的屬性進行“賦值”時,就會自動調用方法:__SET()

判斷(isset):

當對一個對象不存在(未定義或不可見)的屬性進行isset()判斷時,就會自動調用方法:isset()

銷毀(unset):

當對一個對象不存在的(未定義或不可見)屬性進行unset()判斷時,就會自動調用方法:unset()

以上4個方法,被稱為魔術方法。

魔術方法

__GET($屬性名):

在對一個對象不存在的屬性進行“取值”的時候,會自動調用的方法,其中該方法可以帶一個形參,表示要對之取值而又不存在的屬性名(字符串),可以使用該方法對意外情況進行某種特殊的處理。

例如:

?php
class A{
  public $p1 = 1;
}
$a1 = new A();
echo $a1->p1; //1
echo $a1->p2; //未定義$p2,會報錯, Notice: Undefined property: A::$p2
?>

php的重載,使用__get()方法對上面的出錯作“優(yōu)雅處理”。

?php
class A{
  public $p1 = 1;
  //private $p2 = 1; //這里將屬性私有化,其實和未定義一樣,對外部來說都相當于不存在
  function __get($prop_name){
    /*
    //比如可以這樣處理
    echo "br />{$prop_name}屬性還未定義(不存在)!";
    return ""; //也可以返回0,或false等
    */
    //還可以這樣處理
    trigger_error("發(fā)生錯誤:屬性不存在!", E_USER_ERROR);
    die();
  }
}
$a1 = new A();
echo $a1->p1; //1
echo $a1->p2; //未定義$p2,但經過"處理"
?>

這里舉一個對所用私有屬性獲取的操作的例子。

例子:

?php
class Person{
  public $name;
  public $sex;
  private $age; //年齡私有化,類外不能直接訪問這個屬性
  function __construct($name='', $sex='', $age){
    $this->name = $name;
    $this->sex = $sex;
    $this->age = $age;
  }
  private function __get($propertyName){ //這里要用private修飾,防止類外部調用
    if($propertyName == 'age'){
      return $this->age;
    }
  }
}
$p = new Person('yeoman', '男',23);
$v1 = $p->name;
$v2 = $p->sex;
$v3 = $p->age;  //自動調用了__get()方法獲取私有屬性age(函數(shù)定義里面返回)
echo "name=$v1, sex=$v2, age=$v3";
?>

運行結果為:

name=yeoman, sex=男, age=23

__SET($屬性名, 值):

當對一個對象不存在的屬性進行“賦值”時,就會自動調用這個內部的魔術方法;其有2個形參,分別代表要對不存在的屬性進行賦值的“屬性名”和“屬性值”。
這個方法,結合_GET方法,往往可以使我們定義的類,有一種可擴展的特性。即:類或對象的屬性,可以更為方便自由。

例子:

?php
class A{
  //定義一個屬性,
  protected $prop_list = array();  //初始為空數(shù)組
  //這個方法會在A的對象使用一個不存在的屬性進行賦值時調用
  function __set($p,$v){
    //echo "使用不存在的屬性!";
    $this->prop_list[$p] = $v;
  }
  function __get($p){
    return $this->prop_list[$p];
  }
}
$a1 = new A();
$a1->p1 = 1;  //不存在的屬性名賦值,此時會調用_set(),并傳過去"p1"和1
$a1->p2 = 2;
$a1->ac = 'avc';
echo "br />輸出這些“不存在的屬性”的值:";
echo "br />a1->p1:" . $a1->p1;  //不存在的屬性名取值,此時會調用_get(),并傳過去"p1"
echo "br />a1->p2:" . $a1->p2;
echo "br />a1->ac:" . $a1->ac;
?>

運行結果為:

輸出這些“不存在的屬性”的值:
a1->p1:1
a1->p2:2
a1->ac:avc

__ISSET($屬性名):

當對一個對象不存在的屬性進行isset()判斷時,就會自動調用內部方法:isset();

用法:

$v1 = isset($對象->不存在的屬性);  //此時會調用這個對象所屬類中的魔術方法:isset()

例子:

?php
class A{
  //定義一個屬性,
  protected $prop_list = array();  //初始為空數(shù)組
  //這個方法會在A的對象使用一個不存在的屬性進行賦值時調用
  function __set($p,$v){
    //echo "使用不存在的屬性!";
    $this->prop_list[$p] = $v;
  }
  function __get($p){
    if($this->prop_list[$p]){
      return $this->prop_list[$p];
    }else{
      return "該屬性不存在!";
    }
  }
  function __isset($prop){  //__isset()是自定義的方法, isset()是系統(tǒng)函數(shù)
    $re = isset($this->prop_list[$prop]);
    return $re;
  }
}
$a1 = new A();
$a1->p1 = 1;//不存在的屬性名賦值,此時會調用_set(),并傳過去"p1"和1
$a1->p2 = 2;
$a1->ac = 'avc';
echo "br />輸出這些“不存在的屬性”的值";
echo "br />a1->p1:" . $a1->p1;//不存在的屬性名取值,此時會調用_get(),并傳過去"p1"
echo "br />a1->p2:" . $a1->p2;
echo "br />a1->ac:" . $a1->ac;
//下面演示isset判斷不存在的屬性
$v1 = isset($a1->p1); //存在
$v2 = isset($a1->ppp1);  //不存在
var_dump($v1);
echo "br />";
var_dump($v2);
?>

運行結果:

輸出這些“不存在的屬性”的值
a1->p1:1
a1->p2:2
a1->ac:avc
boolean true
boolean false

__UNSET($屬性名)

當對一個對象不存在的屬性進行unset()銷毀時,就會自動調用內部方法:unset();

?php
class A{
  //定義一個屬性,
  protected $prop_list = array();  //初始為空數(shù)組
  //這個方法會在A的對象使用一個不存在的屬性進行賦值時調用
  function __set($p,$v){
    //echo "使用不存在的屬性!";
    $this->prop_list[$p] = $v;
  }
  function __get($p){
    if($this->prop_list[$p]){
      return $this->prop_list[$p];
    }else{
      return "該屬性不存在!";
    }
  }
  function __unset($prop){
    unset($this->prop_list[$prop]);
  }
}
$a1 = new A();
$a1->p1 = 1;//不存在的屬性名賦值,此時會調用_set(),并傳過去"p1"和1
echo "br />a1->p1:" . $a1->p1;//不存在的屬性名取值,此時會調用_get(),并傳過去"p1"
//下面演示unset銷毀一個不存在的屬性
unset($a1->p1);
echo "br />a1->p1:" . $a1->p1;
?>

運行結果為:

a1->p1:1
a1->p1:該屬性不存在!

下面的例子中,聲明一個Person類,并將所有的成員屬性設置成private的。在類中添加自定義的“__isset()”和“__unset()”兩個方法。在類外部使用“isset()”和“unset()”函數(shù)時,會自動調用這兩個方法。代碼如下:

?php
class Person{
  private $name; //此屬性被封住
  private $sex;
  private $age;
  function __construct($name='', $sex='男', $age){
    $this->name = $name;
    $this->sex = $sex;
    $this->age = $age;
  }
  private function __isset($propertyName){  //需要一個參數(shù),是測定的私有屬性的名稱
    if($propertyName == 'name'){
      return false;  //返回假,不允許在類外部測定name屬性
    }
    return isset($this->$propertyName);  //這里propertyName要加$符,因為這是參數(shù),不是屬性
  }
  private function __unset($propertyName){
    if($propertyName == 'name')
      return; //退出方法,不允許刪除對象中的name屬性
    unset($this->$propertyName); //這里propertyName要加$符
  }
  public function say(){
    echo "名字:" . $this->name . ",性別:" . $this->sex . ",年齡:" . $this->age . "br />";
  }
}
$person = new Person("yeoman", "男", 23);
var_dump(isset($person->name));  //輸出bool(false),不允許測定name屬性
var_dump(isset($person->sex)); //輸出bool(true),存在sex私有屬性
var_dump(isset($person->age)); //輸出bool(true),存在age私有屬性
var_dump(isset($person->id)); //輸出bool(false),測定對象中不存在id屬性
unset($person->name); //刪除私有屬性name,但在 __unset()中不允許刪除
unset($person->sex);  //刪除對象中的私有屬性sex,刪除成功
unset($person->age);
$person->say();  //對象中的sex和age屬性被刪除,輸出:名字:yeoman,性別:,年齡:
?>

運行結果:

boolean false
boolean true
boolean true
boolean false
名字:yeoman,性別:,年齡:

方法重載

當對一個對象不存在的實例方法進行“調用”時,會自動調用類中的__call()這個魔術方法;

當對一個類不存在的靜態(tài)方法進行“調用”時,會自動調用類中的__callstatic()這個魔術方法。

例子:直接調用不存在的方法

?php
ini_set('display_errors',1);
class A{
}
$a = new A();
$a->f1(); //不存在的方法
?>

會報錯,報錯內容為:

Fatal error: Uncaught Error: Call to undefined method A::f1()

對上面報錯作“優(yōu)雅處理”:

?php
class A{
  //當對這個類的對象不存在的實力方法進行調用時,會自動調用本方法
  //這個方法必須帶2個形參:
  //$methodName:表示要調用的不存在的方法名;
  //$argument:表示要調用該不存在的方法時,所使用的實參數(shù)據(jù),是一個數(shù)組。
  function __call($methodName, $argument){
    //echo "__call被調用了!";
    echo $methodName . "()方法不存在!";
  }
}
$a = new A();
$a->f1(); //不存在的方法,但經過處理
?>

運行結果為:

f1()方法不存在!

當對一個類不存在的靜態(tài)方法進行“調用”時,會自動調用類中的__callstatic()這個魔術方法。和上面的處理類似。

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • php面向對象的方法重載兩種版本比較
  • php繼承中方法重載(覆蓋)的應用場合
  • PHP使用方法重載實現(xiàn)動態(tài)創(chuàng)建屬性的get和set方法
  • PHP利用func_get_args和func_num_args函數(shù)實現(xiàn)函數(shù)重載實例
  • php中拷貝構造函數(shù)、賦值運算符重載
  • PHP小技巧之函數(shù)重載
  • PHP實現(xiàn)重載的常用方法實例詳解
  • PHP面相對象中的重載與重寫
  • PHP面向對象程序設計模擬一般面向對象語言中的方法重載(overload)示例
  • php魔術函數(shù)__call()用法實例分析
  • PHP __call()方法實現(xiàn)委托示例
  • php 使用 __call實現(xiàn)重載功能示例

標簽:鷹潭 臨沂 銅陵 巴彥淖爾 麗江 重慶 衡陽 十堰

巨人網(wǎng)絡通訊聲明:本文標題《PHP面向對象程序設計重載(overloading)操作詳解》,本文關鍵詞  PHP,面向,對象,程序設計,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP面向對象程序設計重載(overloading)操作詳解》相關的同類信息!
  • 本頁收集關于PHP面向對象程序設計重載(overloading)操作詳解的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    久久国产精品自线拍免费| 可以免费在线看黄的网站| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 久久国产一久久高清| 国产成人精品综合| 欧美日本免费| 精品国产一区二区三区久久久狼| 中文字幕一区二区三区精彩视频| 黄视频网站免费看| 黄色短视频网站| 精品国产亚洲一区二区三区| 国产伦精品一区二区三区在线观看| 成人高清护士在线播放| 91麻豆精品国产片在线观看| 99热精品一区| 国产不卡高清在线观看视频| 亚洲天堂在线播放| 欧美激情一区二区三区在线 | 色综合久久天天综线观看| 日本特黄特黄aaaaa大片| 亚洲女初尝黑人巨高清在线观看| 日日日夜夜操| 99色播| 天天色色色| 91麻豆精品国产自产在线| 日韩av东京社区男人的天堂| 欧美电影免费看大全| 日日日夜夜操| 亚洲精品永久一区| 香蕉视频久久| 毛片成人永久免费视频| 99久久精品国产免费| 国产麻豆精品免费密入口| 国产成人啪精品| 国产成人精品综合久久久| 国产一区国产二区国产三区| 可以在线看黄的网站| 亚洲天堂免费| 亚欧成人毛片一区二区三区四区 | 亚洲女初尝黑人巨高清在线观看| 日日夜人人澡人人澡人人看免| 国产精品自拍在线| 成人免费高清视频| 亚洲 激情| 四虎精品在线观看| 香蕉视频一级| 成人a大片高清在线观看| 欧美日本韩国| 国产精品自拍一区| 午夜在线影院| 国产一级强片在线观看| 台湾毛片| 可以免费在线看黄的网站| 天堂网中文在线| 午夜精品国产自在现线拍| 免费毛片基地| 日韩中文字幕在线观看视频| 成人免费福利片在线观看| 精品视频在线观看免费| 午夜激情视频在线观看 | 深夜做爰性大片中文| 四虎影视精品永久免费网站 | 成人免费观看的视频黄页| 欧美18性精品| 九九精品影院| 国产一区二区精品在线观看| 亚洲第一色在线| 欧美激情一区二区三区在线| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 亚洲第一色在线| 国产麻豆精品hdvideoss| 91麻豆tv| 91麻豆精品国产片在线观看| 香蕉视频三级| 久久久成人影院| 欧美国产日韩久久久| 久久99中文字幕久久| 久久久久久久久综合影视网| 免费国产在线观看| 一本伊大人香蕉高清在线观看| 久久久久久久久综合影视网| 免费的黄色小视频| 麻豆午夜视频| 高清一级做a爱过程不卡视频| 国产极品白嫩美女在线观看看| 日韩欧美一二三区| 99热精品一区| 国产韩国精品一区二区三区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日韩一级黄色大片| 国产不卡高清在线观看视频| 国产精品123| 日本伦理黄色大片在线观看网站| 国产韩国精品一区二区三区| 一级女性全黄久久生活片| 国产一区二区精品久久| 欧美国产日韩一区二区三区| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 久久国产精品只做精品| 日本免费乱理伦片在线观看2018| 日韩一级黄色片| 国产a视频| 99久久视频| 欧美a级大片| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 韩国毛片| 日韩av东京社区男人的天堂| 国产视频一区在线| 天天做人人爱夜夜爽2020 | 高清一级毛片一本到免费观看| 国产一区二区精品久久91| 一级毛片视频播放| 黄视频网站在线免费观看| 久久精品免视看国产明星| 亚洲精品中文字幕久久久久久| 免费毛片播放| 深夜做爰性大片中文| 欧美激情一区二区三区在线| 美女免费黄网站| 一级毛片看真人在线视频| 美国一区二区三区| 韩国三级香港三级日本三级| 欧美激情影院| 国产精品自拍在线观看| 欧美大片一区| 香蕉视频三级| 国产一级生活片| 黄视频网站免费观看| 99久久精品国产免费| 国产伦精品一区二区三区在线观看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 青草国产在线| 欧美国产日韩精品| 久久国产一久久高清| a级黄色毛片免费播放视频| 你懂的日韩| 精品国产一区二区三区久久久蜜臀| 99久久视频| 国产成人精品综合久久久| 久久精品店| 亚洲精品影院| 韩国毛片免费| 午夜欧美成人久久久久久| 亚洲精品影院| 欧美电影免费看大全| 精品视频在线观看一区二区| 日韩av成人| 欧美激情中文字幕一区二区| 国产成人啪精品| 国产伦精品一区二区三区在线观看| 国产一区国产二区国产三区| 午夜在线亚洲| 精品毛片视频| 美女免费毛片| 高清一级做a爱过程不卡视频| 99色视频| 亚洲天堂免费| 午夜欧美成人久久久久久| 日韩一级黄色片| 国产精品免费久久| 天堂网中文字幕| 久久精品店| 国产一区二区精品久久91| 成人免费一级毛片在线播放视频| 日本免费乱理伦片在线观看2018| 成人在免费观看视频国产| 日韩男人天堂| 国产高清视频免费| 国产综合成人观看在线| 国产国语对白一级毛片| 精品视频在线观看免费| 精品国产三级a∨在线观看| 国产福利免费观看| 99热精品在线| 国产成人啪精品| 一级毛片视频播放| 一级女性大黄生活片免费| 国产亚洲精品成人a在线| 高清一级淫片a级中文字幕| 日韩在线观看视频黄| 国产成人女人在线视频观看| 欧美日本免费| 精品在线观看一区| 亚洲第一色在线| 99色视频| 可以在线看黄的网站| 青草国产在线| 国产成人啪精品| 精品在线观看国产| 中文字幕一区二区三区 精品| 免费国产在线视频| 国产成+人+综合+亚洲不卡| 九九精品影院| 韩国三级一区| 精品国产一区二区三区久久久蜜臀| 91麻豆爱豆果冻天美星空| 国产精品1024永久免费视频| 国产韩国精品一区二区三区| 久久久久久久久综合影视网| 免费毛片基地|