php - 在另一个类实例中更改值数组

时间:2014-01-18 06:03:06

标签: php arrays

我正在玩一些PHP,我发现自己想知道什么。

    <?php

class license
{

    public $v=array('product'=>"babab");
    function blah($b)
    {
        if (//code)
        {
            //code
        }
    }

有没有办法在类的另一个实例中更改数组的值?

例如......

    $c = new license;
    //change $v values??
    $c->blah('woof.php');

如何更改$ v数组中的product值?

我希望我很清楚。

2 个答案:

答案 0 :(得分:3)

由于您将其声明为公共,因此任何人都可以向其写入具有该类实例的内容。

$c->v = array('key', 'value');

您可以将其更改为您想要的任何数据类型。

$c->v = new MyObject();
$c->v = NULL;
$c->v = FALSE;
$c->v = 1;

但是,如果您说要创建其他许可证对象并且能够更改属性的值,则无法使用现有体系结构。单例设计模式解决了这个问题。

class License {
  private static $instance;
  private $v;
  private function __construct() {}
  private function __clone() {}

  public static function getInstance() {
    if(!isset(self::$instance)) {
      self::$instance = new static();
    }
    return self::$instance;
  }
  public function setV($data) {
    $this->v = $data;
  }
  public function getV() {
    return $this->v;
  }
}

$license = License::getInstance();
$license->setV(array("key" => "value"));
var_dump($license->getV());

$license2 = License::getInstance();
var_dump($license == $license2);
// true

答案 1 :(得分:3)

您可以按类对象更改公共类属性:

现场演示:https://eval.in/91444

class license
    {

        public $v=array('product'=>"babab");
        function blah($b)
        {
            if (1)
            {
               echo "";
            }
        }

     }

     $c = new license;
     $c->v['product'] = "new values";
     echo $c->v['product'];