1

我还是 PHP 新手,遇到了很多麻烦。我习惯了 C、C++ 和 Java 之类的语言,这让我有点困惑。基本上我的问题是我有以下代码:

class File_Reader 
{

    protected $text;

    public function Scan_File (){}

    public function Skip_Whitespace(&$current_pos)
    {
        //skip past whitespace at the start
        while (($current_pos < strlen($text) && ($text[$current_pos] == ' ')))
            $current_pos++;
    }

    public function __construct(&$file_text)
    {
        $text = $file_text;
    }
}

class Times_File_Reader extends File_Reader
 {
     Public Function Scan_File()
     {
         $errors = array();
         $times = array();
         $current_time;
         $cursor = 0;
         $line = 0;
         while ($cursor < strlen($text))
         {

             Skip_Whitespace($cursor);
             //....lots more code here...
             return $times;
         }
     }
 }

但是当我尝试运行它时,它告诉我 $time 和 Skip_Whitespace 都是未定义的。我不明白,他们应该是继承的。我尝试在 File_Reader 构造函数中放置一个 echo 命令,当我创建 Times_File_Reader 时它确实进入了构造函数。

哦,为了完整起见,这里是我声明 Times_File_Reader 的地方:

   include 'File_Readers.php';

  $text = file_get_contents("01_CT.txt");
  $reader = new Times_File_Reader($text);
  $array = $reader->Scan_File();

我一直在寻找几个小时的答案无济于事,截止日期很快就要到了。任何帮助,将不胜感激。谢谢!

4

2 回答 2

2

我相信您需要注意您正在使用类函数

$this->Skip_Whitespace($cursor);

于 2013-04-11T23:32:51.607 回答
1

您需要将传递给构造函数的属性设置为类的属性(方法中的变量的作用域与 Java 相同)。

你可以使用 $this->property

// File_Reader
public function __construct(&$file_text)
{
    $this->text = $file_text;
}

// Times_File_Reader
public function Scan_File()
{
    $errors = array();
    $times = array();
    $current_time;
    $cursor = 0;
    $line = 0;
    while ($cursor < strlen($this->text))
    {
        $this->Skip_Whitespace($cursor);
        //....lots more code here...
        return $times;
    }
}

编辑-顺便说一句,您似乎正在使用一些古怪的下划线/标题大小写混合。PHP 的最佳实践是对方法使用 lowerCamelCase,对类名使用 CamelCase。

class FileReader
class TimesFileReader
public function scanFile()

另外-您通过引用(&$var)传递变量-您可能不必这样做(我能想到的唯一有效用例是在某些情况下使用闭包/匿名函数)。我承认这方面的文档不是很清楚。http://schlueters.de/blog/archives/125-Do-not-use-PHP-references.html

public function __construct($file_text)
{
    $this->text = $file_text;
}
于 2013-04-11T23:32:04.797 回答