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

时间:2011-01-05 17:30:37

标签: 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"; }

}

然后我在名为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();

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

3 个答案:

答案 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()直接将文件推送到您的脚本中。