代码之家  ›  专栏  ›  技术社区  ›  berkes

php相当于ruby的@instance_变量?

  •  2
  • berkes  · 技术社区  · 14 年前

    我想知道在PHP中是否有一种更短、更好或更干净的方法来分配和使用类变量,然后通过 $this->instance_variable ?

    class Bar {
      #  internal variables
      var $foo = "Hello World";
    
      public function foo() {
        return $this->foo;
      }
    }
    

    我不太熟悉所有PHP的变量范围,但是根据我在官方文档中所了解的,您可以将它们定义为全局的,或者通过 $this-> ? 是否有关键字将它们定义为实例变量,以便像 Rubys @variable ?

    3 回复  |  直到 14 年前
        1
  •  4
  •   Alana Storm    14 年前

    您从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的面向对象语法是基于世界的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的基本部分。

        2
  •  2
  •   Community Navdeep Singh    7 年前

    通过访问php实例属性 $this->variable 运营商内部和公共财产 $object->property .

    您可以通过内部访问类变量 self::$variable 类似于Ruby的类变量。 Discussion of self:: vs. $this-> in PHP

    通常,您会发现PHP比Ruby更冗长,尤其是在引用变量所需的字符方面。

        3
  •  1
  •   VoteyDisciple    14 年前

    如果您有一个实例变量(比如 $foo )只有通过 $this->foo .

    如果绝望的话,你可以写一些 $foo =& $this->foo; 所以您有一个对同一个变量的局部引用,但是唯一的好处是以增加混淆为代价节省几个字符。