4__面向对象的PHP之作用域

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
 */

?>



作者:沙漏哟
出处:计算机的未来在于连接
本文版权归作者和博客园共有,欢迎转载,请留下原文链接
微信随缘扩列,聊创业聊产品,偶尔搞搞技术
原文地址:https://www.cnblogs.com/yeahwell/p/5226069.html