为什么我不能将一个类分成几个文件

par*_*ark 4 php oop class

我正在尝试创建一个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)

这不应该工作吗?我以为你可以在几个文件上传播一个课没问题.我做错了吗?

Gor*_*don 8

当你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)

也不行.


来自OOP 4上PHP手册(无法在5中找到)

您不能将类定义分解为多个文件.您也不能将类定义分解为多个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或查看