前言
php 方法重写,参数不同,报错: Declaration of should be compatible with that
本人laravel报错提示
这里是
ErrorException: Declaration of Module\Article\Controller\Mobile\ListController::tagsVideo($type, $tagsStr) should be compatible with Module\Article\Controller\Web\ListController::tagsVideo($type, $tagsStr, $page = NULL)
因为我这里是继承的关系,这是手机端的控制器继承PC控制器。
这边 一个方法 tagsVideo() 是被重写的方法,但是一直报错,查询了一下,原来是 php 继承 重写 函数,则参数不一致问题。
// MOBILE
/**
* 视频标签内容页 function
*
* @param [str] $type
* @param [str] $tagsStr
* @param [int] $page
* @return void
* @author bobo
* @date 2019-12-18
*/
public function tagsVideo($type, $tagsStr,$page=null)
{
$tags = $this->parseTags($tagsStr);
$count = 10;
// 加上 $page
// 读取缓存版
$articles = $this->paging($this->relationsCache('tagsVideo',$tags, $count*10, Article::CATEGORY_VIDEO), $count, $page);
// $articles = $this->paging($this->relations($tags, $count*10, Article::CATEGORY_VIDEO), $count, $page);
// select * from a where id = 5 limit
$urlPattern = $this->linkFactory->videoTag($type, $tags);
return $this->render("articles", $urlPattern, [
"tagName" => $tagsStr,
"articles" => $articles,
"matchType" => $type,
"tdk" => [
"topic" => $this->findTdkTags($tagsStr),
]
]);
}
//PC
public function tagsVideo($type, $tagsStr,$page=null)
{
$tags = $this->parseTags($tagsStr);
$count = 10;
// 加上 $page
$articles = $this->paging($this->relations($tags, $count*10, Article::CATEGORY_VIDEO), $count, $page);
$urlPattern = $this->linkFactory->videoTag($type, $tags);
return $this->render("articles", $urlPattern, [
"tagName" => $tagsStr,
"articles" => $articles,
"matchType" => $type,
"tdk" => [
"topic" => $this->findTdkTags($tagsStr),
]
]);
}
明显看到,是有一个page 参数,我们可以给一个默认为空即可。
详细举一个例子 来讲
报错提示
abstract class A {
// 方法无参数
public static function foo(){ echo 'bar'; }
}
abstract class B extends A {
// 方法有参数
public static function foo($str){ echo $str; }
}
?>
如上面的代码:类A中的foo方法无参数,类B在继承A后重写foo方法时加入了参数,因此会产生一个类似下面E_STRICT级别的警告:
Strict standards: Declaration of ... should be compatible with that of ...
解决方法:
abstract class A {
// 方法无参数
public static function foo(){ echo 'bar'; }
}
abstract class B extends A {
// 方法有参数
public static function foo($str = NULL){ echo $str; }
}
?>
解决办法
类B在重写foo方法时为新加入的参数指定一个默认值即可。
本作品采用《CC 协议》,转载必须注明作者和本文链接
感谢关注
上海PHP自学中心-免费编程视频教学|