Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我可以在另一个类中包含类为的文件吗?_Php - Fatal编程技术网

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

Php 我可以在另一个类中包含类为的文件吗?,php,Php,我已经测试了这些代码,并给出了结果 //选项a的表列表 但我想知道上面这些类是否以OOP类的有效方式运行?因为类内容在类文件中运行,因为它是通过content.php包含的 我对OOP还是新手 提前感谢。我相信在content.php中,假设在前面的代码行中设置了$option,那么开关块应该如下所示: file.php class file{ function include_file($file_name){ include($file_name); } }

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

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

我对OOP还是新手


提前感谢。

我相信在content.php中,假设在前面的代码行中设置了
$option
,那么
开关
块应该如下所示:

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;
    }
}

因为
表\u列表
是类
内容
的成员。否则,我相信上面声明的类是有效的。不过,我不确定在FIL.PHP中的一个类中是否包含文件。如果没有其他东西,它可能对您没有任何帮助。

回答标题中的问题:是的,类基本上可以在任何范围内定义,并且包含可以嵌套在函数中。因此,在您已经定义的
内容
类是完全有效的

也就是说,代码有三个方面:

1)您正在引用
表格列表
作为变量*(
$table\u列表
),而不是
内容
对象上的方法:

switch ($option) {
    case 'a':
        $content->table_list($option);
        break;
}
2)当您从一个方法(在本例中是
$file->include\u file
方法)中包含一个文件时,该方法的执行是在该方法的内部进行的。这意味着
switch($option)
行中的
$option
将是未定义的(因为它在脚本中的任何地方都没有定义)。您可能需要从、从传递给原始方法的参数或使用
global
关键字将其拉入:

switch($option){
    case 'a':
        $content->table_list($option);
    break;
}
3):如果只是将
$option
传递给该方法,则可能不需要switch语句,尽管您的示例可能过于简单

global $option;
switch($option){ ...
最后,这些示例显然是非常简单的类,因此我无法真正判断它们是否是好的对象,但现在它们作为对象没有任何用途,因为它们没有。(因此,它们现在与相同——换句话说,它们不需要任何对象范围。)



*请注意,在PHP中,这不是语法错误。相反,它计算
$table_list
的值,然后尝试用该名称调用函数。如果
$table\u list
包含“a”,它将尝试调用
a()

当我看到include()的类包装时,我感到很不舒服。是的,类定义没有作用域,所以它们总是可以访问的。您可能希望一次
要求_
您的类定义,而不是
包含它们,否则您可能会遇到重复的定义错误。我将其理解为:“我可以在另一个类中包含一个类文件吗?从那时起我可以使用这个类吗?”。可能是弄错了。@FinalForm:),这就是为什么我想知道这些是OOP类的有效方法吗?因为它给了我正确的结果。@froditus:ack,这可以也会起作用,但是你可能想看看
\uuuuuAutoload
或者更好的是改进的
spl\uAutoload\uRegister
。是的,我已经更新了输入错误。它应该是$content->table\u list($option)
global $option;
$content->table_list($option);