【问题标题】:Why can't I declare private static array of strings in my class? [duplicate]为什么我不能在我的类中声明私有静态字符串数组? [复制]
【发布时间】:2019-04-08 21:08:47
【问题描述】:

我试图在我的类中的函数中返回一个字符串数组

当我尝试使用私有静态数组时,它会返回以下错误:

致命错误:第 17 行 /home/developer/projects/api/src/public/Sql.php 中的常量表达式包含无效操作

这是我的课

<?php

namespace App;

/**
* Class Sql
*
* @return (Array) (Strings)
*/

Class Sql {
  private static $columns = (implode(",", array('product_id','model','viewed','ups','downs','location','price','quantity')));

  public function getColumns() {
    echo "<pre>";
    print_r(self::$columns);
    echo "</pre>";
    exit();
  }
}

是语法有问题还是我做了不该做的事?

正确的做法是什么?

【问题讨论】:

  • 因为您对 implode 的调用不是静态的,必须在运行时解决。常量必须真正定义为常量。
  • 您不能对静态变量使用表达式。这意味着您不能在分配中使用 implode,只需在构造函数或访问静态变量的方法中调用它。
  • @Matt Clark,谢谢你的回答!不是重复的,得分为重复的,不明白我实际上问的是什么
  • 您的问题与标记为骗子的问题没有什么不同。你们都尝试动态分配一个常量,这是你做不到的。

标签: php oop


【解决方案1】:

试试

private static $columns = ['product_id','model','viewed','ups',
                           'downs','location','price','quantity'];

我不明白你为什么要使用 implode,因为那只会导致 $columns 成为一个字符串(它会将项目“粘合”在一个字符串中:product_id,model,viewed,ups...)。

【讨论】:

  • 谢谢,但这不是我问的。我问问题是因为语法错误还是我所做的事情是不可能的。正如@Matt Cark 回复的那样
  • @MateusFelipe 你字面上问:“正确的做法是什么?”。我的答案正是如此;做正确的事。
猜你喜欢
  • 1970-01-01
  • 2021-02-11
  • 2018-10-18
  • 2015-09-11
  • 1970-01-01
  • 2013-05-06
  • 2014-04-13
  • 1970-01-01
  • 2013-03-05
相关资源
最近更新 更多