Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中正确构造类内的数组?_Php_Arrays_Class - Fatal编程技术网

如何在PHP中正确构造类内的数组?

如何在PHP中正确构造类内的数组?,php,arrays,class,Php,Arrays,Class,目前我正在用PHP编写一个简单的OOP脚本,它需要比较数组的ID和日期,并按正确的顺序对它们进行排序 我想知道为什么第一个类中的构造函数没有正确地传递$elements数组 我得到的错误是: 注意:未定义变量:第58行的/Applications/XAMPP/xamppfiles/htdocs/strategy pattern-.php中的元素 可捕获的致命错误:传递给ObjectCollection::_construct()的参数1必须是数组类型,给定null,在。。。在第58行,定义在。。

目前我正在用PHP编写一个简单的OOP脚本,它需要比较数组的ID和日期,并按正确的顺序对它们进行排序

我想知道为什么第一个类中的构造函数没有正确地传递$elements数组

我得到的错误是:

注意:未定义变量:第58行的/Applications/XAMPP/xamppfiles/htdocs/strategy pattern-.php中的元素

可捕获的致命错误:传递给ObjectCollection::_construct()的参数1必须是数组类型,给定null,在。。。在第58行,定义在。。。在线12

代码:


我知道有些地方可能是新手犯了错误,但我真的很好奇我做错了什么,哈哈


提前感谢!:)

在脚本的底部,您有:

$collection = new ObjectCollection($elements);
但是,
$elements
变量未定义。这就是为什么会出现错误

具体错误与您在类构造函数中使用了一个要求传递“数组”的函数有关。在向php添加类型声明之前,php运行时引擎并不关心您传递了哪些变量,只要您向函数或方法传递的变量数量等于所需参数的数量

正如在另一个答案中所指出的,我们中的许多人都假设--

从来就不应该在课堂上。也就是说,这样做会创建并初始化$elements类变量,这是一种在OOP中有很多用途的有效技术。但是,所使用的语法已过时,如果确实希望在对象创建时将类变量初始化为设定值,则应使用包含关键字的语法,如:

protected $elements = array(
  array('id' => 2, 'date' => '2017-01-01',),
  array('id' => 1, 'date' => '2017-02-01')); 
总之,您的问题的答案是,要么在脚本底部将$collection定义为数组,要么在创建
ObjectCollection
对象时传入数组

$collection = new ObjectCollection(array(
     array('id' => 2, 'date' => '2017-01-01'),
     array('id' => 1, 'date' => '2017-02-01'));

在脚本的底部,您有:

$collection = new ObjectCollection($elements);
但是,
$elements
变量未定义。这就是为什么会出现错误

具体错误与您在类构造函数中使用了一个要求传递“数组”的函数有关。在向php添加类型声明之前,php运行时引擎并不关心您传递了哪些变量,只要您向函数或方法传递的变量数量等于所需参数的数量

正如在另一个答案中所指出的,我们中的许多人都假设--

从来就不应该在课堂上。也就是说,这样做会创建并初始化$elements类变量,这是一种在OOP中有很多用途的有效技术。但是,所使用的语法已过时,如果确实希望在对象创建时将类变量初始化为设定值,则应使用包含关键字的语法,如:

protected $elements = array(
  array('id' => 2, 'date' => '2017-01-01',),
  array('id' => 1, 'date' => '2017-02-01')); 
总之,您的问题的答案是,要么在脚本底部将$collection定义为数组,要么在创建
ObjectCollection
对象时传入数组

$collection = new ObjectCollection(array(
     array('id' => 2, 'date' => '2017-01-01'),
     array('id' => 1, 'date' => '2017-02-01'));

您已在类内部而不是外部声明了
元素
变量

$elements = array(
 array('id' => 2, 'date' => '2017-01-01',),
 array('id' => 1, 'date' => '2017-02-01')); 

class ObjectCollection
{

您已在类内部而不是外部声明了
元素
变量

$elements = array(
 array('id' => 2, 'date' => '2017-01-01',),
 array('id' => 1, 'date' => '2017-02-01')); 

class ObjectCollection
{

是的,但是您必须丢失var关键字。解释一下为什么这会回答这个问题会很有帮助。只有代码的答案并不是很有启发性。一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客,以便他们可以找到这个问题并阅读你的答案。是的,但是您必须丢失var关键字。解释一下为什么这会回答这个问题会很有帮助。只有代码的答案并不是真正有启发性的。一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访问者,这样他们可能会发现这个问题并阅读你的答案。好吧,var在相当长的一段时间内都没有使用属性定义。你在用什么手册?PHP4Well
var
在相当长的一段时间内都不是一个使用的属性定义。你在用什么手册?PHP4@trincot此外,在中不需要
var
PHP@trincotPHPGlad中也不需要
var
来提供帮助。因为您似乎在做一些学习练习,所以在同一个脚本中放置多个类是可以理解的,但是在专业/真实的php中,您希望始终将类放置在单独的脚本中,并相应地命名。参见本标准“这样做非常重要,因为php有名称空间和组件库,以及用于依赖关系管理和生成自动加载器以用于项目的composer工具。@gview一定会查看链接,谢谢您的建议!很乐意帮忙。因为您似乎在做一些学习练习,所以在同一个脚本中放置多个类是可以理解的,但是在专业/真实的php中,您希望始终将类放置在单独的脚本中,并相应地命名。请参阅本标准“既然php有名称空间和组件库,那么这样做是非常重要的,而且composer工具可以进行依赖关系管理并生成一个自动加载器以在项目中使用。@gview一定会查看链接,谢谢您的建议!