我正在尝试PHP OOP
我想要找到的是,是否可以通过使用在此对象实例中创建的对象来访问对象实例?
听起来令人困惑,所以这是一个例子:
索引的内容
class mainclass {
var $data;
function __construct($data){
$this->data = $data;
}
function echodata(){
echo $this->data;
}
function start($classname){
include $classname.'.php';
$inner = new $classname();
$inner->show();
}
}
$mainclass = new mainclass('maininfostuff');
$mainclass->start('innerclass');
//i want it to echo "maininfostuff"
Run Code Online (Sandbox Code Playgroud)
innerclass.php的内容
class innerclass{
function show(){
mainclass->echodata();//the problem is here
}
}
Run Code Online (Sandbox Code Playgroud)
这个测试用例的目的是让内部类决定是否/何时运行mainclass echodata函数
如何完成上述例子?(不依赖于静态类或单例或扩展类)
编辑: 由于答案中的一些混乱,我编辑了这个例子
PHP中不可能使用内部类.所以你不能在mainclass中声明你的内部类.而且由于你无法做到这一点,因此无法访问外部类变量,例如Java.
你可以这样做:
class mainclass {
var $data;
function __construct($data){
$this->data = $data;
}
function echodata(){
echo $this->data;
}
function start(){
$inner = new innerclass();
$inner->show($this);
}
}
class innerclass{
function show($mainclass){
$mainclass->echodata();//the problem is here
}
}
$mainclass = new mainclass('maininfostuff');
$mainclass->start();
Run Code Online (Sandbox Code Playgroud)
我个人从来没有见过一类前内的另一个类的方法来定义的,所以如果它实际上在所有工作,我大为吃惊。(我更惊讶于你为什么想要/需要这个,但无论如何......)
构造它时,只需将当前(外部)对象传递给内部对象。
class InnerClass {
var $outer;
function __construct(&$outer) {
$this->outer = $outer;
}
function someStuff() {
$this->outer->doStuff();
}
}
$innerObj = new InnerClass($this);
Run Code Online (Sandbox Code Playgroud)