我可以在另一个类中包含一个带有类的文件吗?

时间:2011-07-19 18:33:10

标签: php

file.php

class file{
    function include_file($file_name){
        include($file_name);
    }
}

$file = new file;
$file->include_file('content.php');

----------------------------------
content.php

include('content_class.php');
$content = new content;
switch($option){
    case 'a':
        $content->table_list($option);
    break;
}

----------------------------------
content_class.php
class content{
    function table_list($option){
        echo 'table list for option : '.$option;
    }
}

我已经测试了这些代码并给出了结果 //选项的表格列表:a

但我想知道上面的那些类是否以有效的方式运行OOP类?因为类内容在类文件中运行,因为它是通过content.php

包含的 我仍然是OOP的新人。

提前致谢。

2 个答案:

答案 0 :(得分:0)

我相信在content.php中,假设在前面的代码行中设置了$optionswitch块应如下所示:

switch ($option) {
    case 'a':
        $content->table_list($option);
        break;
}

由于table_list是班级content的成员。否则,我相信上面声明的类是有效的。不过,我不确定在 file.php 中的类中间包含文件。如果不出意外,它可能不会给你任何好处。

答案 1 :(得分:0)

回答标题中的问题:是的,类基本上可以在任何范围内定义,包含可以嵌套在函数中。因此,定义你所拥有的content类完成它是完全有效的。

那就是关于代码的三件事:

1)您正在引用table_list作为变量*($table_list)而不是content对象上的方法:

switch($option){
    case 'a':
        $content->table_list($option);
    break;
}

2)当您在方法中包含文件时(在本例中为$file->include_file方法),执行位于该方法的scope中。这意味着行$option中的switch($option)将是未定义的(因为它未在此脚本中的任何位置定义)。您可能需要从superglobal,传递给原始方法的参数或使用global关键字中提取它:

global $option;
switch($option){ ...

3):如果您要将$option传递给该方法,您可能不需要switch语句,但可能您的示例过于简单。

global $option;
$content->table_list($option);

最后,示例显然是非常简单的类,所以我无法判断它们是否是好对象,但是现在它们没有作为对象服务,因为它们没有members。 (因此,它们现在与plain old functions相同 - 换句话说,它们不需要任何对象范围。)


*请注意,在PHP中,这不是语法错误。相反,它会评估$table_list,然后尝试按该名称调用函数。如果$table_list包含“a”,则会尝试调用a()