添加新的 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);
所以我 运行 在尝试为我的程序构建 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);