摘要:中有三种访问修饰符,它们可以分别用在类的属性和方法上类的属性和方法统称为类的成员,用来修饰类成员的访问权限公共的默认受保护的私有的常用魔术方法,,,,,,,,,在下面的例子中展示一下用法调用方法调用方法可以将所有变量都能
PHP中有三种访问修饰符,它们可以分别用在类的属性和方法上(类的属性和方法统称为类的成员),用来修饰类成员的访问权限
public(公共的、默认)
protected(受保护的)
private(私有的)
php 常用魔术方法:
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __invoke(), __clone()
在下面的例子中展示一下用法
class Test { private $a = "a"; protected $b = "b"; public $c = "c"; public function __set($name, $value) { // TODO: Implement __set() method. } public function __get($name) { // TODO: Implement __get() method. } public function __construct() { echo "begin construct!"; } public function __destruct() { echo "begin destruct!"; } public function __invoke() { echo "try to invoke!"; // TODO: Implement __invoke() method. } public function __isset($name) { // TODO: Implement __isset() method. } private function get1() { var_dump("private get a :" . $this->a . " "); var_dump("private get b :" . $this->b . " "); var_dump("private get c :" . $this->c . " "); } protected function get2() { var_dump("protected get a :" . $this->a . " "); var_dump("protected get b :" . $this->b . " "); var_dump("protected get c :" . $this->c . " "); } public function get3() { var_dump("public get a :" . $this->a . " "); var_dump("public get b :" . $this->b . " "); var_dump("public get c :" . $this->c . " "); } }
调用Test方法
$t = new Test();
$t(123); // 调用invoke
$t->get3();
// public 方法可以将所有变量都能被调用到
// public get a :a
// public get b :b
// public get c :c
// __set 和 __get 魔术方法使用,如果不定义,那么对于 private 属性 $a 将无法被操作
//$t->a = "123";
//echo $t->a;
//$t->get1(); // private 方法外部不可被调用
//$t->get2(); // protected 方法外部不可被调用
class Test2 extends Test { // private $b = ""; // 报错,子类继承修饰符等级不能低于父类 protected $b;// ok 或 public $b private function get1() { var_dump("Test2 private get a :" . $this->a . " "); // 报错,私有变量不能被继承 var_dump("Test2 private get b :" . $this->b . " "); var_dump("Test2 private get c :" . $this->c . " "); } public function get2() // 继承时修改了 访问权限 { // var_dump("get a :" . $this->a . " ");// 报错,私有变量不能被继承 var_dump("Test2 public get b :" . $this->b . " "); var_dump("Test2 public get c :" . $this->c . " "); } public function get3() { // var_dump("get a :" . $this->a . " ");// 报错,私有变量不能被继承 var_dump("Test2 public get b :" . $this->b . " "); var_dump("Test2 public get c :" . $this->c . " "); } }
$t2 = new Test2();
$t2->get3();
$t2->get2(); // protected方法外部无法被调用,但修改为public后可以被使用
//$t2->get1(); // private方法外部无法被调用
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28467.html
摘要:面试专栏正式起更,每周一三五更新,提供最好最优质的面试内容。继上一篇面试常考内容之面向对象发表后,今天更新面向对象的最后一篇。面向对象的主要特征为封装继承多态。为了提高内聚性减少引起变化,单一原则是低耦合高内聚的面向原则上的引申。 PHP面试专栏正式起更,每周一、三、五更新,提供最好最优质的PHP面试内容。继上一篇PHP面试常考内容之面向对象(2)发表后,今天更新面向对象的最后一篇(3...
摘要:方法如无的调用,则默认为为静态方法。声明静态方法会有错误提示,但很方便,能用尽量用效率高。 一、面向对象的关键字 1.instanceof操作符: 对象是否属于类(检测继承性),如下: class Person {}; class Student extends Person {}; $p=new Person; $s=new Student; ...
摘要:一封装的特性对象的属性或方法加上修饰符尽可能隐藏内部细节访问控制特性修饰符种类二修饰符私有性封装,外部不能调用,内部其他成员可以,用于为其他方法铺路的方法,不露出接口。 一、封装的特性 1.对象的属性或方法加上修饰符 2.尽可能隐藏内部细节 3.访问控制 4.PHP5特性 5.修饰符种类:public/private/protected/var 二、修饰符 1.private: ...
阅读 1157·2021-10-15 09:39
阅读 3057·2021-09-10 10:50
阅读 3456·2019-08-30 15:53
阅读 1881·2019-08-30 15:52
阅读 2569·2019-08-29 15:31
阅读 1979·2019-08-26 13:43
阅读 2596·2019-08-26 13:37
阅读 1447·2019-08-23 18:31