【发布时间】:2012-07-30 06:40:42
【问题描述】:
我有一个小问题。在 javascript 中可以转发范围:
var aaa = new function () {
that = this;
that.bbb = 'foo';
this.ccc = new function () {
this.ddd = 'bar';
this.eee = function () {
return that.bbb+this.ddd;
}
}
}
aaa.ccc.eee() 将返回 'foobar'。 我怎样才能在 PHP 中做一些具有相同效果的事情?我有一个代码:
class bbb {
public $ccc = 'bar';
function __construct () {
echo($that->aaa.$this->ccc);
}
}
class aaa {
public $that;
public $aaa = 'foo';
public $bbb;
function __construct () {
echo($this->aaa);
$this->$bbb = new bbb();
$this->$that = $this;
}
}
$a = new aaa ();
我可以使用类似的东西吗:
$this->bbb = new bbb ($this);
class bbb {
public $that;
function __contruct ($parent) {
$that = $parent
....
}
}
?
【问题讨论】:
-
你应该先从php.net/oop开始
-
虽然它们在某些地方的语法相似,但将 Javascript 与 PHP 进行比较是一个BIG 错误,它们是完全不同的野兽。 Javascript 是一种无类的 OO 语言,PHP 是一种提供一些非常有限的 OO 支持的脚本语言。您展示的 Javascript 代码以 PHP 无法做到的方式创建了 2 个匿名对象。可以假装使用闭包继承范围,但是您需要在声明函数时命名要继承的变量,实际上它所做的只是通过引用将它们传递给对象。
-
@DaveRandom 这些(语法或其他方面)没有任何相似之处,PHP 的类最接近 js 中的原型,而 PHP 的闭包最接近这个 js 怪物
-
@Esailija 我的意思是 Javascript 和 PHP 通常在某些地方在语法上是相似的,而不是上面的两个代码示例。当然,上面的 Javascript 是一种奇怪的处理方式,我想知道对象文字有什么问题?
-
@DaveRandom 啊,我误会你了,我以为你在说这些作品。