我想知道在PHP中分配和使用类变量是否有更短,更好或更清晰的方式,然后通过$this->instance_variable
?
class Bar {
# internal variables
var $foo = "Hello World";
public function foo() {
return $this->foo;
}
}
我对PHP的所有变量范围都不是很熟悉,但根据我在官方文档中的理解,您可以将它们定义为全局,也可以通过$this->
访问它们?
是否有关键字将它们定义为实例变量,因此它们可以像Rubys @variable一样访问?
答案 0 :(得分:4)
你从Ruby中带来的一些关键假设并没有很好地转化为PHP。
在PHP中声明和使用对象属性(相当于Ruby的实例变量)的正确方法是
class Foo
{
//accesible from inside this objects of this class,
//objects that have this class as an ancestor, and from
//outside the object
//var $bar; is equivalent. "var" is PHP 4 syntax,
//when everything was public
public $bar;
//accesible from inside this objects of this class,
//objects that have this class as an ancestor
protected $baz;
//accesible from inside this objects only
private $fiz;
protected function example()
{
echo $this->bar . "\n";
echo $this->baz . "\n";
echo $this->fiz . "\n";
}
}
PHP的OO语法基于世界的Java / C#视图。但是,因为每个PHP页面/脚本/程序都在全局分数中开始,所以需要对本地对象的$this
伪引用。没有它,你会在这样的情况下产生很大程度的歧义
//In main.php
$foo = "bar";
include('example.php');
//in example.php
class Example
{
public $foo="baz";
public function scopeIsHardLetsGoShopping()
{
global $foo;
echo $foo;
}
}
那么,在方法中,引用的$ foo应该是对象变量还是全局变量?如果你说它应该是对象变量,你如何从方法中访问全局foo?如果你说它应该是全局变量,你如何在声明具有相同名称的全局变量后访问本地属性?
Ruby和python在语言开始时提出了一些想法,因此可以避免这些问题。 PHP最初是一种快速破解某些c代码来处理表单和输出HTML的方法。因为PHP做出了合理的努力来向后兼容,所以你最终会像$ this这样古怪的工作。
来自Ruby的形式似乎有点冗长,但它是PHP的基本部分。
答案 1 :(得分:2)
PHP实例属性在内部通过$this->variable
运算符访问,公共属性通过$object->property
访问。
您可以通过self::$variable
在内部访问类变量,类似于Ruby的类变量。 Discussion of self:: vs. $this-> in PHP
一般来说,你会发现PHP比Ruby更冗长,尤其是在引用变量所需的字符方面。
答案 2 :(得分:1)
如果您有实例变量(例如$foo
),则只能通过$this->foo
访问它。
如果绝望,你可以写一些类似$foo =& $this->foo;
的内容,这样你就可以对同一个变量进行本地引用,但唯一的好处就是节省了一些字符,但却增加了混淆。