我正在尝试创建一个分为几个文件的类TestClass
。我将它拆分为3个文件,其中第一个文件TestClassPart1.php
具有类class TestClass {
的开头,而最后一个文件TestClassPart3.php
具有该类的结束括号。这些是3个文件
//TestClassPart1.php
<?php
class TestClass {
public function func1(){
echo "func 1";
}
//TestClassPart2.php
<?php
public function func2(){ echo "func 2"; }
//TestClassPart3.php
<?php
public function func3(){ echo "func 3"; }
}
然后我在名为TestClass.php
的实际类文件中重新组合,因此TestClass.php只是所有3个文件的粘合剂。
<?php
require 'TestClassPart1.php';
require 'TestClassPart2.php';
require 'TestClassPart3.php';
我认为这应该有效,但当我尝试创建TestClass
的实例并调用其中一个函数时,我得到parse error, expecting T_FUNCTION' in C:\wamp\www\TestClassPart1.php on line 5
。第5行是}
func1()
<?php
require 'TestClass.php';
$nc = new TestClass();
$nc->func1();
不应该这样吗?我以为你可以在几个文件上传播一个课没问题。我做错了吗?
答案 0 :(得分:8)
当您require
文件时,PHP将解析并评估内容。
你的课程不完整,所以当PHP解析时
class TestClass {
public function func1(){
echo "func 1";
}
它无法理解课程,因为缺少了结束}。
这很简单。
预测下一个问题。此
class Foo
{
include 'methods.php'
}
也不起作用。
来自PHP Manual on OOP 4(无法在5中找到)
您无法将类定义分解为多个文件。您也不能将类定义分解为多个PHP块,除非break在方法声明中。以下内容不起作用:
<?php
class test {
?>
<?php
function test() {
print 'OK';
}
}
?>
但是,允许以下内容:
<?php
class test {
function test() {
?>
<?php
print 'OK';
}
}
?>
如果您正在寻找Horizontal Reuse, either wait for PHP.next, which will include Traits或查看
答案 1 :(得分:2)
我曾经有过同样的想法,纯粹是学术兴趣。尽管您可以使用PHP生成PHP然后由服务器进行评估,但您无法直接执行您所要求的操作。
长话短说:
短篇小说:
相反:使用适当的OOP实践将功能分成类并扩展现有类。
答案 2 :(得分:0)
如果您必须这样做,您可以使用include_once()
直接将文件推送到您的脚本中。