【发布时间】:2014-12-31 05:21:02
【问题描述】:
我在端口 81 上运行 Apache。我的项目文件夹是 MyPhpProject。在其中我有 2 个文件夹:域和测试。
在 Domain 文件夹中,我有 3 个 PHP 文件:
- BaseDomain.php 包含一个抽象类 BaseDomain
- Location.php 包含一个从 BaseDomain 继承的具体类 Location
- Employee.php 包含一个从 BaseDomain 继承的具体类 Employee
Employee类有一个Location类的引用。
这是 BaseDomain.php:
<?php
abstract class BaseDomain {
}
?>
这是 Location.php:
<?php
$returnRequire = require 'BaseDomain.php';
class Location extends BaseDomain {
private $locationIdInt;
private $codeNameString;
private $descString;
public function setLocationId($locationId) {
$this->locationIdInt = $locationId;
}
public function getLocationId() {
return $this->locationIdInt;
}
public function setCodeName($codeName) {
$this->codeNameString = $codeName;
}
public function getCodeName() {
return $this->codeNameString;
}
public function setDesc($desc) {
$this->descString = $desc;
}
public function getDesc() {
return $this->descString;
}
}
?>
这是Employee.php:
<?php
$returnRequire = require 'BaseDomain.php';
class Employee extends BaseDomain {
private $employeeIdString;
private $locationObject;
public function setEmployeeId($employeeId) {
$this->employeeIdString = $employeeId;
}
public function getEmployeeId() {
return $this->employeeIdString;
}
public function setLocation($location) {
$this->locationObject = $location;
}
public function getLocation() {
return $this->locationObject;
}
}
?>
现在在 Testing 文件夹中,我创建了一个 Test_Employee.php,这是它的代码:
<?php
set_include_path('../Domain');
$getIncludePath = get_include_path();
echo "getIncludePath = " . $getIncludePath;
echo "<br>";
$returnRequire1 = require 'Location.php';
echo "returnRequire for Location.php = " . $returnRequire1;
echo "<br>";
$returnRequire2 = require 'Employee.php';
echo "returnRequire for Employee.php = " . $returnRequire2;
echo "<br>";
?>
当我尝试运行它http://localhost:81/MyPhpProject/Testing/Test_Employee.php 时,我收到一个关于无法重新声明 BaseDomain 类的致命错误。这是我在浏览器中看到的:
getIncludePath = ../域
returnRequire for Location.php = 1
致命错误:无法在 C:\Program Files 中重新声明类 BaseDomain (x86)\Apache 软件 Foundation\Apache2.2\htdocs\MyPhpProject\Domain\BaseDomain.php 上线 2
我没有多次创建 BaseDomain 类。所以这个错误很奇怪。有人可以解释为什么我收到错误消息吗?以及如何解决它。
感谢您的宝贵时间。
【问题讨论】:
-
使用 require_once 代替 require。
-
简单 - 您使用的是
require而不是require_once。 php.net/manual/en/function.require-once.php -
确实如此。在
Test_Employee.php中,您定义了两次,一次是需要Location.php,需要BaseDomain.php,一次是需要Employee.php,需要BaseDomain.php。这正是 require_once (将跳过第二个要求)旨在修复的那种事情。把你的 PHP 程序想象成一个由所有包含的文件组合在一起的大文件;这就是它的工作原理。 -
即使在 Test_Employee.php 中,当我从 require 更改为 require_once 时,我仍然收到相同的错误消息。
标签: php