<?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 一个子类的时候,不会调用父类的构造方法。
//就能拿到部分大家都需要的东西,这就是继承
?>
原文地址:http://www.cnblogs.com/bin-pureLife/p/3777181.html