属性或变量,哪一个更适合上课?

时间:2015-08-14 09:34:53

标签: php class variables

我心中有一个问题。 我可以通过类方法的参数将变量传递给类:

<?php
$val = 'My name';
include('myClass.php');
newClass = new myClass();
newClass->test($val);
?>

<?php
class myClass{
private $myVal;
  public function test($val){
    $this->myVal = $val;
    $this->showName();
  }

  private function showName(){
    echo $this-> $myVal;
  }
 }
?>

或者我可以将变量作为类属性发送。

<?php
include('myClass.php');
newClass = new myClass();
newClass->$myVal='My name';
newClass->test();
?>

<?php
class myClass{
public $myVal;
  public function test(){
    $this->showName();
  }

  private function showName(){
    echo $this-> $myVal;
  }
 }
?>

虽然在这两种情况下,输出都是相同的,这是一个非常简单的例子,但对于大块代码,哪一个在内存使用,cpu使用,I / O使用等方面更好。大块代码意味着假设一个大的javascript代码作为由heredoc编写的参数或作为该类的公共属性传递。

1 个答案:

答案 0 :(得分:0)

最好的方法是使用私有/受保护的属性以及getter和setter。如果要使用类的变量,则将其作为构造函数参数传递

   class MyClass
   {

    private $myVal;

    public function __construct($myVal)
    {
       $this->setMyVal($myVal);
    }

    public function getMyVal()
    {
      return $this->myVal;
    }

    public function setMyVal($myVal)
    {
       $this->myVal = $myVal;

       return $this;
    }
}

用法:

$obj = new MyClass(5);
echo $obj->getMyVal();

当使用getter / setter时你可以更多地控制变量被设置/得到你可以为setter添加验证,截断等等,例如格式化getter或添加一些条件(例如,你可能希望将DateTime作为DateTime根据locale格式化的字符串,但是你想要设置DateTime对象);