1. 云栖社区>
  2. PHP教程>
  3. 正文

public、protect、private在父类子类中使用 - 趴在巨人肩上的矮子

作者:用户 来源:互联网 时间:2017-12-01 11:36:16

privatepublic

public、protect、private在父类子类中使用 - 趴在巨人肩上的矮子 - 摘要: 本文讲的是public、protect、private在父类子类中使用 - 趴在巨人肩上的矮子, 1 <?php 2 class test { 3private $variable = 1; 4public function setVal($param) { 5 $this->variable = $param; 6

 1 <?php 2 class test { 3private $variable = 1; 4public function setVal($param) { 5 $this->variable = $param; 6  } 7public function getVal() { 8 return $this->variable; 9  }10private function output() {11 echo 1;12  }13 }14 class test2 extends test {15public function __construct(){16 $this->variable =2;17  }18 }19 $obj = new test2();20 print_r($obj);21 echo '<br />';22 echo $obj->variable;23 //$obj->output();24 echo '<br />';25 echo $obj->getVal();26 echo '<br />';27 $obj->setVal(3);28 echo $obj->getVal();29 echo '<br />';30 print_r($obj);31 }32 ?>

输出:

test2 Object ( [variable:test:private] => 1 [variable] => 2 )

2

1

3

test2 Object ( [variable:test:private] => 3 [variable] => 2 )

可以看到,私有属性不能直接修改和覆盖,如果这样写只是给子类定义了一个属性,程序不会报错,只有通过父类给出的接口方法来设置父类的私有属性。

b,或者企图覆盖父类的的私有属性 private variable = val;

程序会报错,例如:

 1<?php 2class test { 3private $variable = 1; 4public function setVal($param) { 5 $this->variable = $param; 6  } 7public function getVal() { 8 return $this->variable; 9  }10private function output() {11 echo 1;12  }13 }14 class test2 extends test {15public function __construct(){16 //$this->variable =2;17 private $variable = 2;18  }19 }20 $obj = new test2();21 print_r($obj);22 echo '<br />';23 echo $obj->variable;24 //$obj->output();25 echo '<br />';26 echo $obj->getVal();27 echo '<br />';28 $obj->setVal(3);29 echo $obj->getVal();30 echo '<br />';31 print_r($obj);32 ?>

报错:

Parse error: syntax error, unexpected T_PRIVATE in D:/WWW/smarty_3/index.phpon line 19

2、如果子类需要修改父类中的私有属性,必须在父类中提供修改的接口,也就是修改熟悉的公共方法

  
<?phpclass test { private $variable = 1; public function setVal($param) {$this->variable = $param; } public function getVal() {return $this->variable; } private function output() {echo 1; }}class test2 extends test { public function __construct(){$this->variable =2; }}$obj = new test2();print_r($obj);$obj->setVal(3);echo $obj->getVal();echo '<br />';print_r($obj);}?>

上班零时整理,结果还华丽丽的被领导看到了,尴尬死我了,格式没太顾得上,哎、、、、

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索private , public ,以便于您获取更多的相关知识。