当您在父类和子类中使用相同的函数,但子类需要参数而父类不需要时,您会收到Strict Standards错误消息。
例子
经理:
public function getAtPosition($position)
{
    foreach ($this->getList() as $obj)
    {
        if ($obj->getPosition() == $position)
            return $obj;
    }
    return null;
}
MenuManager 扩展了 Manager:
public function getAtPosition($position, $parent)
{
    foreach ($this->getList() as $m)
    {
        if ($m->getParent() == $parent && $m->getPosition() == $position)
            return $m;
    }
    return null;
}
此示例将生成错误:
  严格标准:MenuManager::getAtPosition() 的声明应该与 Manager::getAtPosition($position) 兼容
因为我们的函数没有相同的参数,所以让我们欺骗这个并添加参数,即使我们没有使用它们!
经理:
public function getAtPosition($position, $dummy = 0) // Dummy to avoid Strict standards errors
{
    foreach ($this->getList() as $obj)
    {
        if ($obj->getPosition() == $position)
            return $obj;
    }
    return null;
}
MenuManager 扩展了 Manager:
public function getAtPosition($position, $parent = 0)
{
    foreach ($this->getList() as $m)
    {
        if ($m->getParent() == $parent && $m->getPosition() == $position)
            return $m;
    }
    return null;
}
唯一需要注意的是,在使用getAtPosition()from时MenuManager.class.php,请确保您实际上发送了 2 个参数,因为我们必须声明$parent = 0以匹配父级的声明。
每个扩展Manager和不包含的类getAtPosition()都将使用方法 from Manager。
如果在子类中声明,php 将使用子类中的方法而不是父类的方法。PHP中没有overloading,所以我就是这样解决它的,直到它被正确实现。