【问题标题】:Why won't the shuffle function work in a PHP class?为什么 shuffle 函数在 PHP 类中不起作用?
【发布时间】:2011-03-16 17:21:34
【问题描述】:

为什么它不洗牌所以我每次都得到一个随机结果?

class greeting {
public $greet = array('hi','hello');
shuffle($greet);
}
$hi = new greeting;
echo $hi->greet[1];

他们的代码有问题吗?

【问题讨论】:

    标签: php oop function shuffle


    【解决方案1】:

    如果你改变它,使随机播放在构造函数中,它应该可以正常工作。

    class greeting {
    
      public $greet = array('hi','hello');
    
      function __construct(){
        shuffle($this->greet);
      }
    }
    

    【讨论】:

    • 另请注意,即使在被放入构造函数之后,它可能仍然没有看起来像它正在洗牌,但它确实是。只是因为数组中只有 2 个项目,并且它们被打乱到相同的原始顺序。
    • 感谢您的解决方案,解释将帮助我更好地理解为什么这样做。
    • @Matthew 在类中执行的代码必须驻留在方法中。 __construct 是创建对象时调用的方法的名称。有关更多信息,我建议您查看有关 OOP 的 PHP 手册部分 :)
    【解决方案2】:

    任何计算都不能在方法外、类内执行。

    class greeting {
       public $greet = array('hi','hello');
       function __construct()
       {
         shuffle($this->greet);
       }
    }
    
    $hi = new greeting;
    echo $hi->greet[1];
    

    【讨论】:

      【解决方案3】:

      在类块中,您只能定义常量、属性(均具有固定值)和方法。您不能将代码放在该块中,代码只能放在方法(AKA 函数)中。

      【讨论】:

      • 为什么代码不能放在那个块里?感谢您澄清这一点。
      • 因为类定义不应该运行代码,所以它的工作是定义它的组件。代码在方法中运行,如果您需要在创建对象时运行一些代码,请按照@laurencek 的建议将其放入构造函数中。
      猜你喜欢
      • 2012-12-11
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多