来自孩子的PHP私有变量访问
Posted
技术标签:
【中文标题】来自孩子的PHP私有变量访问【英文标题】:PHP Private variable access from child 【发布时间】:2012-06-05 07:50:23 【问题描述】:所以我正在尝试解决我在设计 php 类时遇到的问题。我创建了一个基类,并分配了私有变量。我有扩展这个基类的子类,它们通过基类的函数对这些私有变量进行引用和更改。这是一个示例,请记住,我仍然对 private
和 protected
方法/变量之间的区别感到困惑(如果我做错了,请告诉我!):
base.class.php
<?php
class Base
private $test;
public function __construct()
require('sub.class.php');
$sub = new Sub;
echo($this->getTest());
public function getTest()
return $this->test;
protected function setTest($value)
$this->test = $value;
?>
sub.class.php
<?php
class Sub extends Base
public function __construct()
parent::setTest('hello!');
?>
所以我希望结果是hello!
打印在屏幕上——而不是什么都没有。我可能对课程有根本的误解,或者我只是做错了什么。非常感谢任何指导!谢谢。
编辑:
感谢所有提供答案的人 - 我认为,尽管有出色的解决方案,但子类实际上并不是我需要的 - 在这一点上,委托类似乎更有用,因为我真的不需要从其他类中引用 Base 函数。
【问题讨论】:
试试PHP5 OOP。 屏幕上没有任何echo
或print
可以输出东西
@bumperbx - 这行得通……但这对我的目的来说可能不切实际。
那么你见过php extension runkit,它允许你在运行时更改任何东西/任何属性,无论它是私有的
【参考方案1】:
应该是这样的:
base.class.php:
class Base
private $test;
public function __construct()
echo $this->getTest();
public function getTest()
return $this->test;
protected function setTest($value)
$this->test = $value;
sub.class.php:
class Sub extends Base
public function __construct()
parent::setTest('hello!'); // Or, $this->setTest('hello!');
parent::__construct();
主要代码:
require 'base.class.php';
require 'sub.class.php';
$sub = new Sub; // Will print: hello!
【讨论】:
我也会用$this->
替换parent::
好的,我明白为什么这与我认为的相反。有什么方法可以从子函数引用父函数的 setTest 函数,以便代码$this->test = $value
为父函数设置变量,而不是子函数?如果我可以从孩子的构造函数中拨打电话,我最终希望不必拨打电话。我基本上想访问父函数,而不是继承它们。
@iLoch 我不太明白你的意思,但看看我编辑的代码。是你想要的吗?
基本上,是的。我能理解理解起来有多复杂——我觉得我的解释不是应该怎么做。让我尝试详细说明.. 我有基地和孩子。我希望孩子操纵基函数的变量,以便当它调用 setTest 函数时,对$this
的引用指的是基函数,而不是(在您的示例中)从基函数继承该函数的子函数。这可能吗?因此,我不想继承一个函数,而是想简单地使用它,以便对 $this
的引用保持在原始范围(基础)中
您可能会想到的一种方法是,如果 setTest
和 getTest
函数都使用 Base::
而不是使用 $this->
,那么变量总是被写入/读取/读取基类,而不是子类。以上是关于来自孩子的PHP私有变量访问的主要内容,如果未能解决你的问题,请参考以下文章