2015-02-23 15 views
1

所以我试图为我的程序构建我的类文件时遇到了一个奇怪的错误。在使用PHP之前,我从来没有遇到过这个问题,尤其是面向对象的PHP。基本上解释它的最快方法是添加一个新文件使另一个文件不存在。我会在下面演示:添加新的Class文件破坏程序

文件#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 

FILE#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 
} 

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

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

===最新通报===

文件#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" 
} 
+1

范围解析运算符(::)是“静态的,恒定的,覆盖的属性或一个类的方法”。 getConn不是那些。只需使用getConn()而不是parent :: getConn()。 – bobdye 2015-02-23 16:12:39

+0

好吧我会尝试,但在我这样做之前,它的顺序是否对你有意义?既然'File#2'就是一切都要去的地方,那么应该是父类还是其他所有的孩子呢?我只是想确保我的编程标准是正确的。 – 2015-02-23 16:14:36

+1

继承看起来不错,但它只是真正的片段,所以我不知道你将要结束的架构。 – bobdye 2015-02-23 16:17:05

回答

1

因为ProcessApplicationQuery从ProcessApplication,你继承了一切不需要两者:

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

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

而是直接传递$ CONN到最后一类,如:

$query = new ProcessApplicationQuery($CONN); 
+0

非常感谢你的帮助我今天真的学到了很多东西! – 2015-02-23 16:39:14