添加新的 Class 文件会破坏程序

Adding new Class file destroys program

所以我 运行 在尝试为我的程序构建 class 文件时遇到了 st运行ge 错误。在特别是面向对象 PHP 之前,我从来没有 运行 遇到过 PHP 的这个问题。基本上最快的解释方法是添加一个新文件使另一个文件不存在。我将在下面演示:

文件#1

//process.php
require_once '../../inc/config.php';
include 'ProcessApplication/ProcessApplication.php';
$processor = new ProcessApplication($CONN);

if($processor->getConn()){
    list($general, $phone) = $processor->processGeneralInfo($_REQUEST['general_information'];
}

我不会包含 ProcessApplication.php 文件中的所有代码,因为它不相关。

文件#2

class ProcessApplication{
    protected $conn = null;
    function __construct($CONN){
        $this->conn = $CONN;
    }
    public function getConn(){
        return $this->conn;
    }
    .
    .
    .
}//end ProcessApplication class

文件 #3,确保继承正常工作的简单测试程序

class ProcessApplicationQuery extends ProcessApplication{
    public function getReady(){
        if($this->getConn()){ //edited as of most recent update
            print "Ready";
        }else{
            print "not Ready";
        }
    } 
}

到目前为止,文件 #3 未包含在内,但该程序仍然有效。此时我已经将它包含在文件 #1 中,我不知道为什么

//process.php
require_once '../../inc/config.php';
include 'ProcessApplication/ProcessApplication.php';
include 'ProcessApllication/ProcessApplicationQuery.php'; //2nd class file added

$processor = new ProcessApplication($CONN);

if($processor->getConn()){
    list($general, $phone) = $processor->processGeneralInfo($_REQUEST['general_information'];
    $processor->getReady(); //added to check file #3 was working
}

现在 FILE #1 已经更新。我得到 Fatal Error: failed to open file stream '../../inc/config.php' 即使它工作得很好,然后我撤消所有更新,并将 FILE #1 恢复到其原始状态,但程序仍然失败。

基于我在 PHP 和 JAVA 中学到的关于面向对象编程的所有知识,这一小部分程序应该可以正常工作。除非它是我忘记的简单的东西,否则我看不出我的错误在哪里。我真的很沮丧,我希望这对某人有意义。

===更新===

FILE #1 现在看起来像这样并且已经更新以匹配问题的正确解决方案

 //process.php
include '../../inc/config.php';
include 'ProcessApplication/ProcessApplication.php';
include 'ProcessApplication/ProcessApplication.php';

$processor = new ProcessApplicationQuery($CONN);
if($processor->getConn()){
    list($general, $phone) = $processor->processGeneralInfo($_REQUEST['general_information'];

    $processor->getReady(); // this prints out "ready"
}

因为 ProcessApplicationQuery 继承了 ProcessApplication 的所有内容,所以您不需要两者:

$processor = new ProcessApplication($CONN);
$query = new ProcessApplicationQuery();

这将创建两个不同的对象,并且 $processor 是唯一具有 $CONN 的对象。

相反,直接将 $CONN 传递给最后的 class,例如:

$query = new ProcessApplicationQuery($CONN);