1. 字段作用域
PHP支持的字段作用域有: public、private、protected、final、static
(1)public
访问方式: 公共字段可以由相应的对象直接操作和访问。
注意事项:在OOP中并不鼓励使用公共字段,因为直接访问使得类无法很容易地完成某种数据验证。
(2)private
访问方式:指定为私有的字符按不能由类实例化的对象直接访问,也不能由子类使用。
注意事项:私有字段必须通过公共接口来访问,这符合OOP的封装原则。
(3)protected
与函数通常需要只在内部使用的变量一样,类也可以包含只在内部使用的字段。这些字段称为保护字段。
访问方式: 在继承的子类中也可以访问和操作保护字段,这是私有字段所没有的特性。
作用: 如果希望拓展类,就应当使用保护字段而不是私有字段。
(4)final
访问方式:在为字段设置final作用域时,将阻止在子类中覆盖这个字段。
(5)static
访问方式:提供所有类共享的字段,这些字段与所有类的实例有关,但不能由任何特定的对象调用。
2. 方法作用域
PHP支持6种方法作用域:public、private、protected、abstract、final、static
(1)public
访问方式:公共方法可以在任何位置任何时间访问。
(2)private
访问方式:标记为private的方法只能在类内部使用,不能由实例化的对象调用,也不能由类的子类使用。
作用: 一般这类方法只用作作为其他方法的“辅助方法”。
(3)protected
访问方式: 标记为protected的方法只能在该类及其子类中使用。
注意事项: 不能再类外部调用具有protected作用域的方法。
(4)abstract
访问方式: abstract方法只在父类中声明,在子类中实现。
(5)final
访问方式: 标记为final的方法可以防止被子类覆盖。
(6)static
访问方式:提供所有类共享的方法,这些方法与所有类的实例有关,但不能由任何特定的对象调用。
<?php
/**
* 类的概念
*/
class Staff {
public $name;
private $title;
protected $wage;
// final $ssn; 在php5.4中已不可使用,只能修饰类和方法
const PI = '3.14159265'; // 常量
public function clockIn() {
echo "Member $this->name clocked in at " . date ( "h:i:s" ) . "<br/>";
}
public function clockOut() {
echo "Member clocked out at " . date ( "h:i:s" ) . "<br/>";
}
}
$employee = new Staff ();
// 在类外部操作共有字段,不推荐此使用方法
$employee->name = "yeahwell";
$name = $employee->name;
echo "新建的雇员名为$name<br/>";
// $employee->name = "123456"; //无数据验证
// 使用常量
echo "π为" . Staff::PI . "<br />";
// 在类外部调用共有方法
$employee->clockIn ();
// Staff::clockOut ();
/*
* php5.4.5环境下将有此异常 Strict Standards: Non-static method Staff::clockOut() should
* not be called statically in D:\YWProgramFiles\Programer\Server\Apache
* Software
* Foundation\Apache2.2\htdocs\ZendWorkspace\PHPManual\oop\oop_work_domain.php
* on line 41 Member clocked out at 05:16:47
*/
?>