我更新到PHP 7.2,它创建了一个问题数组(无双关语)。我一直在淘汰它们(主要是这些sizeof和count()警告。我们遇到的一个错误:
警告:sizeof():参数必须是在第236行的/usr/www/domain/phpmyd/includes/class_registry.php中实现Countable的数组或对象
我试图像这样修复它:
if (sizeof($this->config) < 1) {
为此:
if (!empty($this->config) &&(sizeof($this->config) < 1)) {
但是它产生了很多下面显示的错误,但是,我们以相同的方式修复了这个错误,并且效果很好。更改此内容:
if (0 < sizeof($this->language)) {
为此:
if (!empty($this->language) && (0 < sizeof($this->language))) {
排除基本相同的错误。现在,请记住,以上警告是仅剩的错误。其他所有内容都可以正常运行,但是,如果我“修复”警告,则会收到一堆错误,这些错误会破坏站点并且显得无关紧要。因此,如果我替换第一个字符串,则会出现所有这些错误:
这些错误没有出现,并且在我改变之前,这些东西运行良好
if (sizeof($this->config) < 1) {
该如何链接?我不确定这是怎么回事,哪条线会影响或破坏其他(看似无关)的事情。初始问题的完整代码(第236行):
/**
* Get a configuration value
* @param string $key
* @return mixed
*/
public function getConfig($key) {
if (sizeof($this->config) < 1) {
$this->loadConfig();
}
return isset($this->config[$key]) ? $this->config[$key] : false;
}
有什么想法吗?
答案 0 :(得分:2)
我认为这里发生的事情是,您最初所做的更改确保了loadConfig()
永远不会发生,并且loadConfig()
中的某些内容负责定义所有在更改后会被警告的常量。
如果您更改了
if (sizeof($this->config) < 1) {
到
if (!empty($this->config) &&(sizeof($this->config) < 1)) {
然后,如果$this->config
为null
(对象属性的默认值尚未赋值),则第二个值表示if条件将不满足,因为{ {1}} 为空,在第一个中,它会得到满足,因为null
仍然返回0,即使它给出了无法计数的警告。
sizeof(null)
从来没有真正需要过。您不必为了发现某物而仅数数。
我认为这应该可以正常工作,并且对它的实际含义更有意义。
sizeof
答案 1 :(得分:2)
你可以在传递变量之前检查它是否是一个数组:
if(is_array($this->config)){
if(sizeof($this.config) < 1) {
// code here
}
}
答案 2 :(得分:1)
对于初学者来说,不使用sizeof
,而是使用count
;)便宜的改进-总是减少一个操作码。
第二,请确保您传递一个数组,而不是null或那里的任何东西,例如:
// dirty fix
if (count((array) $this->config) > 0) {
…
}
要正确解决此问题,无论如何都不要允许将此属性设置为null
。如果您要进行一些延迟加载,请检查变量是否为null或不是数组,例如:
public function getConfig($key, $default = false)
{
if (!is_array($this->config)) {
// make sure it becomes one after the load
$this->loadConfig();
}
return $this->config[$key]) ?? $default;
}