我正在尝试创建一个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"; }
}
Run Code Online (Sandbox Code Playgroud)
然后我在实际的类文件中重新组合,TestClass.php因此TestClass.php只是所有3个文件的粘合剂.
<?php
require 'TestClassPart1.php';
require 'TestClassPart2.php';
require 'TestClassPart3.php';
Run Code Online (Sandbox Code Playgroud)
我认为这应该可行,但是当我尝试创建一个实例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();
Run Code Online (Sandbox Code Playgroud)
这不应该工作吗?我以为你可以在几个文件上传播一个课没问题.我做错了吗?
当你require是一个文件时,PHP将解析并评估内容.
你的类是不完整的,所以当PHP解析时
class TestClass {
public function func1(){
echo "func 1";
}
Run Code Online (Sandbox Code Playgroud)
它无法理解课程,因为缺少了结束}.
就那么简单.
并预测你的下一个问题.这个
class Foo
{
include 'methods.php'
}
Run Code Online (Sandbox Code Playgroud)
也不行.
您不能将类定义分解为多个文件.您也不能将类定义分解为多个PHP块,除非break在方法声明中.以下内容不起作用:
<?php
class test {
?>
<?php
function test() {
print 'OK';
}
}
?>
Run Code Online (Sandbox Code Playgroud)
但是,允许以下内容:
<?php
class test {
function test() {
?>
<?php
print 'OK';
}
}
?>
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找水平重用,请等待PHP.next,其中包括Traits或查看