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的新人。提前致谢。
答案 0 :(得分:0)
我相信在content.php中,假设在前面的代码行中设置了$option
,switch
块应如下所示:
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()
。