我对OO PHP相对较新,坦白说PHP一般。我有一个类,我在构造函数中分配数组值。但是,当我稍后访问该数组时,它告诉我该数组为null。任何想法如何超出范围?
class SentenceContentContainer {
public $strSentence; //theSentence entered
public $arrayOfWords = []; //words in the sentence
private $num_words_in_sentence;
function __construct($strSentence)
{
$this->strSentence = $strSentence;
$arrayOfWords = explode(" ", $strSentence); //get the array of words in the string
$num_words_in_sentence = count($arrayOfWords); //count elements in the sentence
}
function sortHighestLetterRepeaterOfSentence()
{
usort($arrayOfWords, "compare"); //says parameter 1 is null
}
...
}
可从以下网址访问:
<html>
<head><title>PHP Code</title></head>
<body>
<?php
include "classes.php";
//process the data input
$post_string = implode("",$_POST); //change post array to string
// instantiate 1 of 2 objects
$sentenceCC = new SentenceContentContainer($post_string);
call_user_method("sortHighestLetterRepeaterOfSentence",$sentenceCC);
?>
<form method="post" action="">
<input type="text" name="value">
<input type="submit">
</form>
</body>
</html>
当我尝试在Sentence构造函数中添加this-&gt; arrayOfWords时,它说这是一个语法问题。
我想知道这个问题是不是它以某种方式运行了call_user_method,即使我在输入句子后还没有在表格中提交?我不会认为它会到达那里吗?
补充:当我在浏览器中调用脚本时,在表单中点击提交之前,当我看到警告信息时。
另外:也许我需要检查$ arrayOfWords是否为null或sortHighestLetterRepeaterOfSentence中的某些内容?我尝试添加一个null的检查,但它说的是未定义的变量arrayOfWords,我测试它为!= null。我也在考虑isset,但不清楚这会解决它。
答案 0 :(得分:3)
$arrayOfWords
是一个仅存在于__construct
函数内的变量。
$this->arrayOfWords
是一个私有类变量,它存在于类的任何方法中,并且每个实例具有不同的值。
P.S。你为什么使用call_user_method
?此函数已弃用(我认为在PHP 7中已删除)。简单来说,如果你在教程中看到它,你应该考虑一个新的教程,因为那个教程已经过时了。
你可以这样做:
$sentenceCC->sortHighestLetterRepeaterOfSentence()
如果必须,可以改为使用call_user_func
:
call_user_func([$sentenceCC, 'sortHighestLetterRepeaterOfSentence']);
答案 1 :(得分:1)
是的,即使未提交表单,此代码也会执行。
我认为您应该检查$ _POST变量并允许仅运行代码
if(count($ _POST))