2010-09-30 59 views
2

在PHP中,只有在包含文件中才能看到的类?在Java中,我可以在另一个文件中看到它们,而不在当前文件中包含该文件。在PHP中,看到任何给定的类将其包含在文件中的唯一方法是?所以我只是把我的课堂文件包括在内?PHP如何看待类 - 仅在包含文件中?

+0

PHP 5中的自动加载功能是很好的解决方案。 – JustinKaz 2010-09-30 18:38:55

回答

8

在PHP中,只有在包含文件中才能看到的类?

是。但是,在PHP 5中,有新的Autoloading功能,允许您在调用类名称时构建包含文件的函数。这实际上可以自动初始化类。

本手册中有简单的例子(我伸出略它)清楚这是如何工作:

<?php 
function __autoload($class_name) { 
    require_once $class_name . '.php'; 
} 

$obj = new MyClass1(); // Autoloader will load "MyClass1.php" 
$obj2 = new MyClass2(); // Autoloader will load "MyClass2.php" 
?> 

先进的自动加载磁带机一样Zend Framework的Zend_Loader_Autoloader(和标准PHP库的spl_autoload_register(),欢呼@ircmaxell)使它甚至可以为不同的前缀添加不同的自动加载规则,允许使用不同的命名约定从不同的目录加载库。

+0

SPL的自动加载函数['spl_autoload_register'](http://us.php.net/manual/en/function.spl-autoload-register.php)...您可以定义任意数量的自动加载函数。 PHP将继续尝试列表中的下一个,直到它找到该类,或者以类未找到的错误结束。这是你不应该在自动加载功能中出错的原因之一(让任何已注册的人都有机会)。哦,没有理由对'class_exists'进行检查(除非是为了防止为已经定义的类手动调用它)... – ircmaxell 2010-09-30 19:00:00

+0

@ircmaxell好点。你当然是对的,我没有想过。代码固定。 – 2010-09-30 19:03:05

+1

如果您害怕手动呼叫,请将其设为班级,并将'load'方法设为私人。这样你就需要在类中调用'spl_autoload_register',并且不能在外面手动调用它(因为它是私有的,所以你只需要担心就不会自己调用它);否则+1就可以获得更好的信息。 .. – ircmaxell 2010-09-30 19:05:27

-1

是的只有在包含语句中才能访问其他php文件中的函数。 PHP是标准的程序语言。它从最上面的命令开始工作,所以如果你希望执行像包含面向对象的PHP一样的类,或者将文件包含在php页面的顶部。

0

是 - PHP没有任何可视化代码并没有在文件中直接包含使用代码。但是,许多开发人员选择使用PHP自动加载功能(http://php.net/manual/en/language.oop5.autoload),而不是包含(或首选方法 - 需要).php文件,因此许多开发人员都选择使用PHP自动加载功能(http://php.net/manual/zh-cn/language.oop5.autoload) .php)在您使用特定类时自动加载所需的文件。

0

是的,要使文件中的类可用,必须包含该文件。

包括可以通过多种方式来实现一个文件,或者使用以下功能:

include(filename); 
include_once(filename) - which only includes the file if it's not already loaded 
require(filename) - equal to include, except that the script will halt if file is not available 
requier_once(filename) 

文件也可以通过__autoload或spl_autoload_register功能自动加载。更多关于PHP.net自动加载类的信息。