標籤: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 一個子類的時候,不會調用父類的構造方法。
//就能拿到部分大家都需要的東西,這就是繼承
?>