这是关于编程PHP时可能遇到的警告,错误和通知的一些答案,并且不知道如何修复.这也是社区Wiki,因此邀请每个人参与添加和维护此列表.
Stack Overflow上经常弹出诸如"已发送标头"或"调用非对象成员"之类的问题.这些问题的根本原因总是一样的.因此,这些问题的答案通常会重复,然后显示OP在他/她的特定情况下要改变哪一行.这些答案不会为网站添加任何价值,因为它们仅适用于OP的特定代码.具有相同错误的其他用户不能轻易地从中读取解决方案,因为它们过于本地化.这很难过,因为一旦你理解了根本原因,修复错误是微不足道的.因此,该列表试图以一般的方式解释解决方案.
如果您的问题已被标记为重复,请在下面找到您的错误消息并将修复程序应用于您的代码.答案通常包含进一步调查的链接,以防单独的一般答案不清楚.
如果您想贡献,请添加您的"收藏"错误消息,警告或通知,每个答案一个,简短说明它意味着什么(即使它只是突出显示其手册页的术语),可能的解决方案或调试方法和现有问答的清单.此外,随时改善任何现有的答案.
另外,请参阅
我收到致命错误:在第317行的Stemmer.php中不在对象上下文中时使用$ this.
目前我正在使用我在互联网上找到的Stemmer类,在搜索数据库匹配之前将单词更改为其词干版本.
我已经阅读了人们遇到类似问题的所有相关帖子.不同之处在于导致错误的代码肯定在对象上下文中(下面的代码将显示).另一个奇怪的事情是代码的某些部分与它之前和之后的错误非常相似,这似乎不会造成任何困难.在不同的时间,错误行已更改为其他一些行.
有没有人有任何想法可能导致问题.我使用php5.1.34,如果这有任何区别.
调用Stemmer类的代码
if (isset($search) && $search != "") {
$filtered_words = WordFilter::filter($search);
foreach($filtered_words as $word) {
if(strlen($word) <= 2) {
continue;
}
$w = Stemmer::stem($word);
$stemmed_words[] = $w;
}
}
Run Code Online (Sandbox Code Playgroud)
Stemmer类:
class Stemmer
{
...
if ( strlen($word) > 2 ) {
**$word = $this->_step_1($word);**
}
...
}
Run Code Online (Sandbox Code Playgroud)
即使错误发生在代码中的不同位置,似乎总是在有代码试图在同一个类中调用另一个方法时.这可能是我不知道的php5中的错误吗?任何建议都将非常感激.
谢谢Archie
是否有人知道在PHP方法中是否静态调用(Classname :: function)或在对象内部($ classInstance-> function)?
我正在创建一个显示博客的功能.所以我做了一个show blog功能,但它不断给出"在不在对象上下文中时使用$ this"错误
Class Blog{
public function getLatestBlogsBig($cat = null){
$sqlString = "SELECT blog_id FROM jab_blog";
if($cat != null)
$sqlString .= " WHERE blog_cat = " . $cat;
$sqlString .= " ORDER BY blog_id DESC LIMIT 5";
$blog = mysql_query($sqlString);
while($id = mysql_result($blog,"blog_id")){
$this->showBlog($id); //Error is on this line
}
}
function showBlog($id,$small = false){
$sqlString = "SELECT blog_id FROM jab_blog WHERE blog_id=" . $id . ";";
$blog = mysql_query($sqlString);
if($small = true){
echo "<ul>";
while($blogItem = mysql_fetch_array($blog)){
echo '<a …Run Code Online (Sandbox Code Playgroud) 我在Fatal error: Using $this when not in object context in ..\controllers\ServiceRequestController.php on line 661使用EasyTabs扩展的控制器操作调用视图文件时遇到错误.
Iam在视图文件
ServiceRequestController::actionTest();
和控制器中调用这样的控制器动作
public static function actionTest()
{
$this->redirect('test');
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能摆脱这个错误?当我用Google搜索时,我发现了这一点$this cannot be used in a static method..所以我尝试
$model = new ServiceRequest();
$model->Test();在我的视图文件中使用.但它显示错误,ServiceRequest and its behaviors do not have a method or closure named "actionTest".
任何人都可以帮我修复错误?在此先感谢我尝试使用此链接修复.但我认为我错了.PHP致命错误:在不在对象上下文中时使用$ this
我像往常一样创造我的课程.我创建了成员变量,我设置了setter和getter,我使用$ this来调用成员变量的值.但由于某种原因,我现在得到了致命的错误:在不在对象上下文中时使用$ this
这是常规的php文件,它应该用它们的值填充成员变量
try
{
$add_advert = new Site();
$add_advert->add_time = mysqli_real_escape_string($link, $_POST['time']);
$add_advert->add_url = mysqli_real_escape_string($link, $_POST['URL']);
$add_advert->add_advertisement($_FILES);
$feedback = "<div class='succes'>Advertisement succesfully added!</div>";
}
catch(Exception $e)
{
$feedback = "<div class='error'>";
$feedback .= $e->getMessage();
$feedback .= "</div>";
}
Run Code Online (Sandbox Code Playgroud)
成员变量:
class Site
{
protected $add_url;
protected $add_time;
protected $extend_id;
Run Code Online (Sandbox Code Playgroud)
二传手和吸气剂:
public function __set($p_sProperty, $p_sValue)
{
switch($p_sProperty)
{
case "add_url":
$this->add_url = $p_sValue;
break;
case "add_time":
$this->add_time = $p_sValue;
break;
case "extend_id":
$this->extend_id = $p_sValue;
break;
}
}//end of …Run Code Online (Sandbox Code Playgroud)