当前位置:K88软件开发文章中心编程语言PHPPHP01 → 文章内容

PHP 面向对象

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-11 12:38:36

();运行实例 ?析构函数析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,其语法格式如下:void __destruct ( void )实例<?phpclass MyDestructableClass { function __construct() { print "构造函数\n"; $this->name = "MyDestructableClass"; } function __destruct() { print "销毁 " . $this->name . "\n"; }}$obj = new MyDestructableClass();?>执行以上代码,输出结果为:构造函数销毁 MyDestructableClass继承PHP 使用关键字 extends 来继承一个类,PHP 不支持多继承,格式如下:class Child extends Parent { // 代码部分}实例实例中 Child_Site 类继承了 Site 类,并扩展了功能:<?php // 子类扩展站点类别class Child_Site extends Site { var $category;    function setCate($par){        $this->category = $par;    }     function getCate(){        echo $this->category . PHP_EOL;    }}方法重写如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。实例中重写了 getUrl 与 getTitle 方法:function getUrl() { echo $this->url . PHP_EOL; return $this->url;} function getTitle(){ echo $this->title . PHP_EOL; return $this->title;}访问控制PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。public(公有):公有的类成员可以在任何地方被访问。protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。private(私有):私有的类成员则只能被其定义所在的类访问。属性的访问控制类属性必须定义为公有,受保护,私有之一。如果用 var 定义,则被视为公有。<?php/** * Define MyClass */class MyClass{ public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; }}$obj = new MyClass();echo $obj->public; // 这行能被正常执行echo $obj->protected; // 这行会产生一个致命错误echo $obj->private; // 这行也会产生一个致命错误$obj->printHello(); // 输出 Public、Protected 和 Private/** * Define MyClass2 */class MyClass2 extends MyClass{ // 可以对 public 和 protected 进行重定义,但 private 而不能 protected $protected = 'Protected2'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; }}$obj2 = new MyClass2();echo $obj2->public; // 这行能被正常执行echo $obj2->private; // 未定义 privateecho $obj2->protected; // 这行会产生一个致命错误$obj2->printHello(); // 输出 Public、Protected2 和 Undefined?>方法的访问控制类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有。<?php/** * Define MyClass */class MyClass{ // 声明一个公有的构造函数 public function __construct() { } // 声明一个公有的方法 public function MyPublic() { } // 声明一个受保护的方法 protected function MyProtected() { } // 声明一个私有的方法 private function MyPrivate() { } // 此方法为公有 function Foo() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); }}$myclass = new MyClass;$myclass->MyPublic(); // 这行能被正常执行$myclass->MyProtected(); // 这行会产生一个致命错误$myclass->MyPrivate(); // 这行会产生一个致命错误$myclass->Foo(); // 公有,受保护,私有都可以执行/** * Define MyClass2 */class MyClass2 extends MyClass{ // 此方法为公有 function Foo2() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); // 这行会产生一个致命错误 }}$myclass2 = new MyClass2;$myclass2->MyPublic(); // 这行能被正常执行$myclass2->Foo2(); // 公有的和受保护的都可执行,但私有的不行class Bar { public function test() { $this->testPrivate(); $this->testPublic(); } public function testPublic() { echo "Bar:





:





testPublic\n"; } private function testPrivate() { echo "Bar:





:





testPrivate\n"; }}class Foo extends Bar { public function testPublic() { echo "Foo:





:





testPublic\n"; } private function testPrivate() { echo "Foo:





:





testPrivate\n"; }}$myFoo = new foo();$myFoo->test(); // Bar:





:





testPrivate // Foo:





:





testPublic?>接口使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。接口中定义的所有方法都必须是公有,这是接口的特性。要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。<?php// 声明一个'iTemplate'接口interface iTemplate{ public function setVariable($name, $var); public function getHtml($template);}// 实现接口class Template implements iTemplate{ private $vars = array(); public function setVariable($name, $var) { $this->vars[$name] = $var; } public function getHtml($template) { foreach($this->vars as $name => $value) { $template = str_replace('{' . $name . '}', $value, $template); } return $template; }}常量可以把在类中始终保持不变的值定义为常量

上一页  [1] [2] [3]  下一页


PHP 面向对象