澳门新莆京手机网站-新蒲京娱乐场 > 书籍 > 深入深入分析php之面向对象_php实例_脚本之家

深入深入分析php之面向对象_php实例_脚本之家

1,轻便的对象创立
复制代码 代码如下:
//类的效应域final:将阻止子类重写这么些字段
//方法的成效域abstract: 在父类中声称,在子类中得以完毕
//定义类:
class Employee{
//定义字段
private $name;
protected $title;
public $wage;
//常量
const PI = 3.1415926;
//静态成员变量
private static $visitors = 0;
//定义布局函数
function __construct(){
//使用静态成员变量
self::$visitors++;
echo "constructor";
}
//定义析构函数
function __destruct(){
echo "destruct";
}
//申明方法
public function clockIn(){
//使用字段
echo "Member $this->name";
}
//在拜访多少个指标并不具备的脾气时(举例私家字段卡塔尔(قطر‎,就算该对象客户__get和__set方法,则会活动调用__get方法或__set方法
function __set($property,$value){
$this->$property = $value;
}
function __get($property){
return $this->$property;
}
}
//类的接续 Manager世襲Employee
class Manager extends Employee {
function __construct(){
//调用父类的布局函数或措施
parent::__construct();
parent::clockIn();
echo "Manager constructor";
}
}
//创设对象
$employee = new Employee();
$employee->wage = 10000;
//使用常量
echo Employee::PI;
//调用方法
$employee->clockIn();
$manager = new Employee();
//instanceof判别叁个指标是类的实例、类的子类,依旧促成了有个别特定接口
if($manager instanceof Employee ) echo "Yes";

public function __set{ if(isset($this->__data[$property])){ return $this->__data[$property] = $value; }else{ return false; } } public function __isset{ if(isset($this->__data[$property])){ return true; }else{ return false; } } public function __unset{ if(isset($this->__data[$property])){ return unset($this->__data[$property]); }else{ return false; } }}

注:
假诺要开创三个模子,那一个模型将由一些严密相关的靶子接收,就能够应用抽象类。借使要开创由一些不相干对象采纳的成效,就动用接口。
风流倜傥旦必需从三个来源世袭行为,就采取接口。php能够世襲八个接口,但不可能扩展多个抽象类。
要是精晓全数类都会分享一个国有的表现完成,就动用抽象类,并在里边落到实处该表现。在接口中不也许落举行为。

以前对面向对象只限于照本宣科型,工作这么久了,回过头来看又是黄金时代翻体会了然,供大家看看。1.finalfinal:php5新添二个final关键字。假若父类中的方法被声称为final,则子类不恐怕掩瞒该办法;要是八个类被声称final,则不能被接续。复制代码 代码如下:class BaseClass{ public function test(卡塔尔(قطر‎{ ehco "test"; } final public function moreTest(卡塔尔国{ echo "moretest"; }}class ChildClass extends BaseClass{ public function moreTest(卡塔尔{ echo "moretest"; }}// 发生 Fatal error: Cannot override final method BaseClass::moretest(卡塔尔(قطر‎2.__toString复制代码 代码如下:class Person{ protected $name; protected $email; public function setName{ $this->name = $name; } public function setEmail{ $this->email = $email; } public function __toString(){ return "$this->name email>"; }}$rasums = new Person;$rasums->setName;$rasums->setEmail;print $rasums;3.接口和抽象类接口的成效:你想要保障二个类依照一定的名目、可以预知性和原型达成二个或八个章程。接口的必要: 类中全体为架空方法 抽象方法钱不用加abstract 接口抽象方法属性为public 成员属性必须为常量例:复制代码 代码如下:interface ChildTest{ public function childTest(State of Qatar;}class FathTest implements ChildTest1,ChildTest2{ public function childTest(卡塔尔国{ echo 1; } …………}抽象的效果: 其实抽象类和接口类有局地很像,记得在哪里看到那样一句话,抽象类就把类像的局地抽取来,那句看上去很滑稽,其实它说出了抽象类的真谛,抽象类的意义 是,当您意识你的相当多类里面用无尽方法你不停的在重复写,那您就足以杜撰使用抽象类了,你或者会说“作者不是足以重写一个类每一个集体类作者个实例化三个这几个公 共类,调用相似的主意就足以了”,这里是足以,实际上抽象类做的专门的学业也正是那几个,可是他省去了您实例化的这几个手续,让你好似直接调用本类方法生龙活虎致方便,并且你还足以重载那么些方法。抽象的渴求: 类中至少有三个抽象方法 抽象方法钱总得加abstract例:复制代码 代码如下:abstract class Database{ abstract public function connect(State of Qatar; abstract public function query(卡塔尔(قطر‎; abstract public function fetch(卡塔尔; abstract public function close(卡塔尔国;}注:抽象方法无法定义为私有方法、无法定义为最后方法,因为它们必要被三番两次。4.传递对象援用php4:全体“=”都以成立二个别本php5:除了对象外,其余“=”进行赋值时,都以开创叁个副本;而目的则是引用5.克隆指标一、聚合类:__call方法简要介绍:当客商端代码用类中未定义的艺术时,__call会被调用。__call(卡塔尔接受三个参数,一个是情势名称,另叁个是传递给要调用方法的有所参数方法重回的别样值都会回来给客商,将雷同调用情势实在存在相似例:复制代码 代码如下:class Address{ protected $city; protected $country;

2,高级OO特性
(1)对象克隆
复制代码 代码如下:
//对象克隆
class ClassA{
private $name;
private $title;
public function setName($name){
$this->name = $name;
}
function getName(){
return $this->name;
}
public function setTitle($title){
$this->title = $title;
}
public function getTitle(){
return $this->title;
}
function __clone(){
echo "小编被克隆了","
";
}
}
$classA = new ClassA();
$classA->setName("NameA");
$classA->setTitle("TitleA");
$classB = clone $classA;
$classB->setName("NameB");
echo $classA->getName(),"
",$classA->getTitle(),"
";
echo $classB->getName(),"
",$classB->getTitle(),"
";
/* output
本身被克隆了
NameA
TitleA
NameB
TitleA
*/

public function __call{ if(method_exists($this->address,$method)){ return call_user_func_array(array($this->address,$method),$arguments); } } //深克隆 public function __clone(){ $this->address = clone $this->address; }}

(2)接口
复制代码 代码如下:
//接口
interface IPillage{
function method();
}
class ClassC extends ClassA implements IPillage {
function method(){
echo "inteface method";
}
}
$classC = new ClassC();
$classC->method();
//inteface method

public function setName{ $this->name = $name; } public function getName(){ return $this->name; }

(3)抽象类
复制代码 代码如下:
//抽象类,是不能够实例化的类,只好当作别的类世襲的基类
abstract class BaseClass{
protected $name;
abstract function method();
}
class ChileClass extends BaseClass {
function method(){
echo "method";
}
}
$child = new ChileClass();
$child->method();
//output method

public function __get{ if(isset($this->__data[$property])){ return $this->__data[$property]; }else{ return false; } }

class Person{ protected $name; protected $address; //浅克隆 public function __construct(){ $this->address = new Address; }

Copyright © 2015-2019 http://www.carrefourstation.com. 澳门新莆京手机网站-新蒲京娱乐场有限公司 版权所有