【问题标题】:(PHP) Declare class properties via loop(PHP) 通过循环声明类属性
【发布时间】:2018-02-15 02:10:52
【问题描述】:

我想使用循环在类中创建属性。

class Example           
{
    for( $i=0; $i<5; $i++ )  
    {   
    public $num . $i;
    }

}

当我这样做时,我得到了错误

FATAL ERROR 语法错误,意外'for' (T_FOR),期待函数 (T_FUNCTION)

我的理解是完全错误的还是语法错误?谢谢

【问题讨论】:

  • 规则 #1 不要给变量编号;如果你有编号的变量,那么你可能应该使用数组来代替
  • 规则 #2 你的理解是完全错误的......一个类包含函数/方法和属性......你不能在函数/属性之外有代码......如果你想动态定义属性,然后在构造方法代码中定义;但是您通过为它们分配一个值来定义它们,并且它们永远不会是 public 以外的任何东西
  • 类示例 {public $num;for ($i=0; $i
  • 您是否考虑过将数组作为类成员?

标签: php


【解决方案1】:

你可以使用构造函数来实现:

class Example           
{
   public function __Construct(){
      for( $i=0; $i<5; $i++ )  
      {   
       public $this->{'num' . $i};
      }
    }

}

在构造函数中,您可以执行操作。 Reference.

实现此目的的另一种方法是:

class Example           
{
  public $num = array();
   public function fun(){
      for( $i=0; $i<5; $i++ )  
      {   
        $this->num[$i] = 'value';
      }
    }

}

将变量作为数组。

【讨论】:

    【解决方案2】:

    你可以做的是循环进入类的constructor

    class Example{
        public function __construct(){
            for($i=0; $i<5; $i++)
                $this->{'num' . $i} = $i;
        }
    }
    

    然后你只需创建一个新的 Example 实例:

    $obj = new Example();
    

    这会给你一个像这样的对象:

    object(Example)#1 (5) {
      ["num0"]=>
      int(0)
      ["num1"]=>
      int(1)
      ["num2"]=>
      int(2)
      ["num3"]=>
      int(3)
      ["num4"]=>
      int(4)
    }
    

    【讨论】:

      【解决方案3】:

      你在做什么是错误的语法。 除了方法或属性声明之外,您不能在类中直接包含任何内容。

      要创建动态属性,请关注this link

      类似这样的东西 (Source:)

      class Test{
          public function createProperty($propertyName, $propertyValue){
              $this->{$propertyName} = $propertyValue;
          }
      }
      
      $test = new Test();
      $test->createProperty('property1', '50');
      echo $test->property1;
      

      【讨论】:

        猜你喜欢
        • 2016-01-08
        • 1970-01-01
        • 2016-03-27
        • 1970-01-01
        • 1970-01-01
        • 2020-09-17
        • 2014-09-30
        • 2019-05-12
        • 1970-01-01
        相关资源
        最近更新 更多