方法的访问控制类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有。 <?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; } }
常量可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。 常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。 自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字(如 self,parent 或 static)。 实例<?php class MyClass { const constant = '常量值';
function showConstant() { echo self::constant . PHP_EOL; } }
echo MyClass::constant . PHP_EOL;
$classname
|