面向对象 - 作用域

  • 作者:KK

  • 发表日期:2017.2.17


方法的作用域

方法和属性都有作用域的特性,其实前面介绍方法和属性的时候,用的都是公有作用域,下面我定义一个带私有作用域方法的类:

class User{
	public function say(){
		$name = $this->getName();
		echo $name;
	}
	
	private function getName(){
		return 'Jay';
	}
}

上面User类的getName方法在前面用了private这个关键词进行了修饰,这样就说明它的作用域是私有

私有的方法不可以被外面调用,只能被自己的其它方法调用,比如公有say方法调用私有方法getName:

$user = new User();
$user->say(); // Jay
$user->getName(); //报错消息 Call to private method User::getName() from context

如果希望某些方法不被外面调用,只被自己调用来支持完成其它事情,那就可以将这个方法定义为私有方法


属性作用域

懂了方法的作用域之后,属性也很容易理解了,直接看代码:

class User{
	public $name = 'Jay';
	
	private $age = 11;
}

$user = new User();
echo $user->name;
echo $user->age; //报错,因为调用了一个私有的属性,这是禁止的

保护作用域

除了public(公有)和private(私有)两个最常见的作用域以外,还有一个作用域就是protected(保护)作用域

保护作用域也是私有作用域的一种,先初步认识一下:

class User{
	protected $age = 11;
}

$user = new User();
echo $user->age; //报错,因为保护作用域也是私有的

与私有作用域的区别

首先私有作用域只允许在这个类里面的代码进行互相调用,不允许其它地方调用

保护作用域则是不允许外部调用,但允许在这个类里面的代码调用,又允许父类或者子类调用

如果新手按顺序看我的文章这样下来还没学