PHP物件導向三大特徵

來源:互聯網
上載者:User

標籤:c   class   java   a   ext   get   

<?php
//PHP 物件導向三大特徵 封裝 繼承 多態 <抽象>


//封裝

/**
* @author bin
*
*/
/* class Person{
//encapsulate
private $name;
private $age;
//這個就好比我們Java中的get set 想spring注入的 通過通過set方法 通過建構函式 一樣
public function __set($columnName,$value){
$this->columnName = $value;
}

public function __get($columnName){
if(isset($columnName)){
return $this->columnName;
}else{
return null;
}
}

//構造器賦值
public function __construct($age,$name){
$this->age = $age;
$this->name = $name;
}

public function updateName($name){
$this->name = $name;
}
public function deleteName(){
unset($this->name);
}
}

$person1 = new Person("1", "chenbin1");
var_dump($person1);
//想修改名字
//$person1->name = "chenbin2" 顯然這是錯誤的
$person1->updateName("chenbin2");
var_dump($person1);
$person1->deleteName();
var_dump($person1);
//__set __get魔術方法
$person1->age = 300;
echo $person1->age;
//這就是封裝 要對對象進行修改改變 只能通過對象自身的成員方法來操作。
*/
//繼承
//父類
class Bwm730{
public $name = "寶馬730";
public $commName = "寶馬汽車";
public $contury = "German";
protected $maxPrice = "300W"; //寶馬汽車最高價格是300W
private $price = ‘130W‘;//寶馬730 的價格

public function __construct(){
echo "<br>我是父類的構造方法<br>";

}

public function getInfo(){
echo $this->name.‘||‘.$this->commName."|| 所屬國家".$this->contury."||寶馬汽車最高價格為".$this->maxPrice."||".$this->price;
}
public function parentMethod(){
echo "<br>我是父類的成員方法<br>";
}
}
//子類
class Bwm740 extends Bwm730{
public $name = "寶馬740";
private $myPrice = "100w";
public function __construct(){
self::parentMethod();//這個可以調用父類的普通成員函數
//parent::getInfo();
Bwm730::__construct();//這個可以調用父類的魔術函數
parent::__construct();//這個可以調用父類的魔術函數

}
public function getInfo_1(){
echo $this->name.‘||‘.$this->commName."|| 所屬國家".$this->contury."||寶馬汽車最高價格為".$this->maxPrice."||".$this->myPrice;
}
//PHP 重載 和Java不同 Java 能夠根據參數來區分 但是PHP的參數是無法判讀是什麼的,只是為了在調用方法的時候在棧空間開闢一個地址
//PHP5 實現重載的方法 是魔術方法__call

public function __call($method,$parameter){
if(count($parameter) == 1){
$this->getInfo_1();
echo "<br>只有一個參數調用 getInfo_1<br>";
}else{
$this->parentMethod();
echo "<br>參數有多,調用父類方法 parentMethod<br>";
}
}
//PHP 重寫 重寫肯定要有繼承 有父子關係 方法名 參數個數(名稱可以不一樣) 必須一致 實際上重寫是多態的體現形式
//所謂多態,多態就是一個東西,有多重存在形式,父類一個方法,子類可以有不同的實現方式。
// 方法覆蓋的時候 存取修飾詞 大於等於父類的方法修飾符範圍
public function getInfo(){
echo "<br>重寫父類getInfo方法<br>";
}
}

//$bwm730 = new Bwm730();
//$bwm730->getInfo();

$bwm740 = new Bwm740();
$bwm740->getInfo();
$bwm740->test(1,2,3);
//$bwm740->getInfo_1();//調用這個方法的時候 拿不到price的值,說明private 的成員屬性是不能被子類拿到的 方法也是一樣的
//結果寶馬730||寶馬汽車|| 所屬國家German寶馬740||寶馬汽車|| 所屬國家German

//繼承就是 有時候我們會有很多相似的東西,不想多次寫,那麼我們寫一個基類,也就是父類,我們所有擴充的子類只需要繼承基類,
// 注意:關於父類 子類構造方法, new 一個子類的時候,不會調用父類的構造方法。
//就能拿到部分大家都需要的東西,這就是繼承

 

 


?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.