我有以下php。但是,当我看到index.php时,出现以下错误消息。严格的标准:非静态方法Page :: getInstanceByName()不应在第12行的/var/www/webworks/index.php中被静态调用我希望有人可以告诉我如何解决该问题。提前致谢。index.php// { common variables and functionsinclude_once('ww.incs/common.php');$page=isset($_REQUEST['page'])?$_REQUEST['page']:'';$id=isset($_REQUEST['id'])?(int)$_REQUEST['id']:0;...// { get current page idif(!$id){ if($page){ // load by name $r=Page::getInstanceByName($page); if($r && isset($r->id))$id=$r->id; } if(!$id){ // else load by special $special=1; if(!$page){ $r=Page::getInstanceBySpecial($special); if($r && isset($r->id))$id=$r->id; } }}// { load page dataif($id){ $PAGEDATA=(isset($r) && $r)?$r : Page::getInstance($id);}else{ echo '404 thing goes here'; exit;}......ww.incs / common.php<?phprequire dirname(__FILE__).'/basics.php';......ww.incs / basics.phpsession_start();if(!function_exists('__autoload')){ function __autoload($name) { require $name . '.php'; }}......Page.phpclass Page{ static $instances = array(); static $instancesByName = array(); static $instancesBySpecial = array(); function __construct($v,$byField=0,$fromRow=0,$pvq=0){ # byField: 0=ID; 1=Name; 3=special if (!$byField && is_numeric($v)){ // by ID $r=$fromRow?$fromRow:($v?dbRow("select * from pages where id=$v limit 1"):array()); } else if ($byField == 1){ // by name $name=strtolower(str_replace('-','_',$v)); $fname='page_by_name_'.md5($name); $r=dbRow("select * from pages where name like '".addslashes($name)."' limit 1"); } else if ($byField == 3 && is_numeric($v)){ // by special $fname='page_by_special_'.$v; $r=dbRow("select * from pages where special&$v limit 1"); }
4 回答
![?](http://img1.sycdn.imooc.com/5458471300017f3702200220-100-100.jpg)
元芳怎么了
TA贡献1798条经验 获得超7个赞
您的方法缺少static关键字。更改
function getInstanceByName($name=''){
至
public static function getInstanceByName($name=''){
如果要静态调用它们。
请注意,静态方法(和Singletons)是可测试性的牺牲品。
还要注意,您在构造函数中做的工作太多了,尤其是所有查询都不应放在其中。您的构造函数应该做的就是将对象设置为有效状态。如果您必须从类外部获取数据,请考虑注入数据而不是提取数据。另请注意,构造函数无法返回任何内容。它们将始终返回void,因此所有这些return false语句都只会终止构造。
![?](http://img1.sycdn.imooc.com/54584e2c00010a2c02200220-100-100.jpg)
撒科打诨
TA贡献1934条经验 获得超2个赞
我认为这可以回答您的问题。
非静态方法.....不应静态调用
如果该方法不是静态的,则需要像这样进行初始化:
$var = new ClassName();
$var->method();
或者,在PHP 5.4+中,您可以使用以下语法:
(new ClassName)->method();
- 4 回答
- 0 关注
- 856 浏览
添加回答
举报
0/150
提交
取消