2011-03-23 93 views
2

使PHP中的类时,就是这两者之间的区别:PHP的面向对象的类变量VS对象变量

class Search 

    function __construct() 
    { 

     $this->variable1= 1234;  

    } 
} 

class Search 

    private $variable1; 

$variable1=1234; 

    function __construct() 
    { 

    } 
} 

,如果我需要在不同的方法来访问的值不它对我选择的方法有什么影响?

谢谢

+1

一个区别是第二个版本不解析。 – mario 2011-03-23 14:55:06

回答

5

的d对象和类变量之间的区别是你如何访问它们。

  • 对象变量:$obj->var
  • 类变量:class::$var

您的类定义应该是:

class Search { 
    static $variable = 2; // only accessible as Search::$variable 
} 

对战:

class Search2 { 
    var $variable = "object_prop"; 
} 

无论您使用的是var还是publicprivate访问修饰符都不会使变量成为对象属性。决定性因素是它没有被声明为static,因为这会使其仅作为类变量访问。

1

在你的第一个方法变量没有声明为private,这样你就可以从访问变量 对象外, 而在你的第二个方法只允许类的内部使用

2

然而,如果你在调用变量/属性之前没有声明变量/属性,你会得到一个警告,说变量不存在。

这是做这种方式的最佳实践:

class Search { 

    private $_variable1; 

    function __construct() { 
    $this->_variable1=1234; 
    } 

} 

注:私有变量只提供给他们在声明的类

+0

不,他们不是,$ this->变量将声明该变量为公共,你可以编辑它...这是他的两种方法合并^^ – sharpner 2011-03-23 14:55:25

+0

@sharpner。我在回答后发现了这个问题。然而,问题是在不同的方法中访问变量,而不是从课外。 – RDL 2011-03-23 14:57:53

+0

投票原因为何? – RDL 2011-03-23 14:59:59

2

好于星(只是为了更好的做法)使用。 _(下划线)如果一个方法或属性是私有/保护的,所以你的代码应该是这样的:

class Search 
{ 
    private $_variable1 = 1234; 

    //example usage 
    public function someMethod() 
    { 
     if ($this->_variable1 == 1234) { 
      //do smth 
     } 
    } 
}