OO PHP数组值丢失或丢失

时间:2016-05-05 18:36:34

标签: php html arrays scope

我对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,但不清楚这会解决它。

2 个答案:

答案 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))