【发布时间】:2017-06-16 19:10:30
【问题描述】:
目前我正在用 PHP 编写一个简单的 OOP 脚本,它需要比较数组的 ID 和 DATE 并按正确的顺序对它们进行排序。
我想知道为什么我的第一个类中的构造函数没有正确传递 $elements 数组。
我得到的错误:
注意:未定义变量:第 58 行 /Applications/XAMPP/xamppfiles/htdocs/strategy-pattern-.php 中的元素
可捕获的致命错误:传递给 ObjectCollection::__construct() 的参数 1 必须是数组类型,给定 null,在第 58 行的 ... 中调用并在第 12 行的 ... 中定义
代码:
<?php
class ObjectCollection
{
var $elements = array(
array('id' => 2, 'date' => '2017-01-01',),
array('id' => 1, 'date' => '2017-02-01'));
var $comparator;
function __construct(array $elements)
{
$this->elements = $elements;
}
function sort()
{
if (!$this->comparator) {
throw new \LogicException('Comparator is not set');
}
uasort($this->elements, [$this->comparator, 'compare']);
return $this->elements;
}
function setComparator(ComparatorInterface $comparator)
{
$this->comparator = $comparator;
}
}
interface ComparatorInterface
{
function compare($a, $b);
}
class DateComparator implements ComparatorInterface
{
function compare($a, $b)
{
$aDate = new \DateTime($a['date']);
$bDate = new \DateTime($b['date']);
return $aDate <> $bDate;
}
}
class IdComparator implements ComparatorInterface
{
function compare($a, $b)
{
return $a['id'] <> $b['id'];
}
}
$collection = new ObjectCollection($elements);
$collection->setComparator(new IdComparator());
$collection->sort();
echo "Sorted by ID:\n <br>";
print_r($collection->elements);
$collection->setComparator(new DateComparator());
$collection->sort();
echo "<br>Sorted by date:\n <br>";
print_r($collection->elements);
?>
我知道某处可能只是一个新手错误,但我真的很好奇我做错了什么哈哈。
提前致谢! :)
【问题讨论】:
-
好吧,
var已经有一段时间没有使用属性定义了。你用的是什么手册? PHP4