我可以在PHP中更改坐在函数内的局部变量的值吗?

时间:2011-06-11 03:42:44

标签: php

我正在阅读一篇关于PHP中的数据封装的文章,作者以这样的方式解释说它让我想知道这是否真的可行?这是他说的。

  

封装的主要目的   (范围)是确保你写的   无法破解的代码。这个   适用范围一般,所以让我   使用更简单的本地示例   函数内的变量:

function xyz ($x) {
  $y = 1;
  while ($y <= 10) {
    $array[] = $y * $x;
    $y++;
  }
  return $array;
}
  

此功能的目的是   传递一个数字并返回一个数组。该   示例代码非常基本。为了   函数xyz()是可靠的,   你需要得到保证   每次完全相同的事情。所以   如果有人有能力怎么办?   从外面改变那个最初的   $ y或$ array的值?甚至是$ x?如果   你能从外面做到这一点   功能,你不能再   保证那个功能是什么   返回。

现在这让我想知道我是否可以真正改变坐在函数内部的局部变量的值而不使用任何参数,如上所示?如果有可能我该怎么办?

谢谢..

2 个答案:

答案 0 :(得分:2)

对于这个例子,你将无法改变任何变量,因为它们都是在函数内声明的。

但是如果你有一个带有公共类变量的类,你可以根据需要在课外改变它。 (虽然这种形式很糟糕,可能会搞砸很多事情。)

答案 1 :(得分:0)

除非你添加一个魔术setter方法(__set($ key,$ value)),并以你可以访问该内部成员的方式配置它,然后没有。如果您正在使用某种形式的工厂,您可以在进行此功能时更改密钥,但如果您尚未公开,则没有别的办法。

唯一可见的例外是单件工厂:您可以使用不同的参数创建单例方法的新实例(在其他地方更改它),但我怀疑您是否可能使用方法。< / p>