时间:2021-07-01 10:21:17 帮助过:5人阅读
- <br>//类的作用域final:将阻止子类重写这个字段 <br>//方法的作用域abstract: 在父类中声明,在子类中实现 <br>//定义类: <br>class Employee{ <br>//定义字段 <br>private $name; <br>protected $title; <br>public $wage; <br>//常量 <br>const PI = 3.1415926; <br>//静态成员变量 <br>private static $visitors = 0; <br>//定义构造函数 <br>function __construct(){ <br>//使用静态成员变量 <br>self::$visitors++; <br>echo "constructor"; <br>} <br>//定义析构函数 <br>function __destruct(){ <br>echo "destruct"; <br>} <br>//声明方法 <br>public function clockIn(){ <br>//使用字段 <br>echo "Member $this->name"; <br>} <br>//在访问一个对象并不拥有的属性时(比如私有字段),如果该对象用户__get和__set方法,则会自动调用__get方法或__set方法 <br>function __set($property,$value){ <br>$this->$property = $value; <br>} <br>function __get($property){ <br>return $this->$property; <br>} <br>} <br>//类的继承 Manager继承Employee <br>class Manager extends Employee { <br>function __construct(){ <br>//调用父类的构造函数或方法 <br>parent::__construct(); <br>parent::clockIn(); <br>echo "Manager constructor"; <br>} <br>} <br>//创建对象 <br>$employee = new Employee(); <br>$employee->wage = 10000; <br>//使用常量 <br>echo Employee::PI; <br>//调用方法 <br>$employee->clockIn(); <br>$manager = new Employee(); <br>//instanceof判断一个对象是类的实例、类的子类,还是实现了某个特定接口 <br>if($manager instanceof Employee ) echo "Yes"; <br> <br>2,高级OO特性 <br>(1)对象克隆 <br><span style="CURSOR: pointer" onclick="doCopy('code1299')"><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>//对象克隆 <br>class ClassA{ <br>private $name; <br>private $title; <br>public function setName($name){ <br>$this->name = $name; <br>} <br>function getName(){ <br>return $this->name; <br>} <br>public function setTitle($title){ <br>$this->title = $title; <br>} <br>public function getTitle(){ <br>return $this->title; <br>} <br>function __clone(){ <br>echo "我被克隆了","<br>"; <br>} <br>} <br>$classA = new ClassA(); <br>$classA->setName("NameA"); <br>$classA->setTitle("TitleA"); <br>$classB = clone $classA; <br>$classB->setName("NameB"); <br>echo $classA->getName(),"<br>",$classA->getTitle(),"<br>"; <br>echo $classB->getName(),"<br>",$classB->getTitle(),"<br>"; <br>/* output <br>我被克隆了 <br>NameA <br>TitleA <br>NameB <br>TitleA <br>*/ <br> <br>(2)接口 <br><span style="CURSOR: pointer" onclick="doCopy('code79272')"><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>//接口 <br>interface IPillage{ <br>function method(); <br>} <br>class ClassC extends ClassA implements IPillage { <br>function method(){ <br>echo "inteface method"; <br>} <br>} <br>$classC = new ClassC(); <br>$classC->method(); <br>//inteface method <br> <br>(3)抽象类 <br><span style="CURSOR: pointer" onclick="doCopy('code18793')"><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>//抽象类,是不能实例化的类,只能作为其它类继承的基类 <br>abstract class BaseClass{ <br>protected $name; <br>abstract function method(); <br>} <br>class ChileClass extends BaseClass { <br>function method(){ <br>echo "method"; <br>} <br>} <br>$child = new ChileClass(); <br>$child->method(); <br>//output method <br> <br>注: <br>如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建由一些不相关对象采用的功能,就使用接口。 <br>如果必须从多个来源继承行为,就使用接口。php可以继承多个接口,但不能扩展多个抽象类。 <br>如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。在接口中无法实现行为。</li><li><p></p></li><li><p align="left"><span id="url" itemprop="url">http://www.bkjia.com/PHPjc/320862.html</span><span id="indexUrl" itemprop="indexUrl">www.bkjia.com</span><span id="isOriginal" itemprop="isOriginal">true</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">http://www.bkjia.com/PHPjc/320862.html</span><span id="genre" itemprop="genre">TechArticle</span><span id="description" itemprop="description">1,简单的对象创建 代码如下:</span></p><pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li>//类的作用域final:将阻止子类重写这个字段 //方法的作用域abstract: 在父类中声明,在子类中实现 /...<p></p></li><li> </li></ol></pre></li></ol></pre></li></ol></pre></li></ol></pre>