我需要知道,如果一个php类在第一次被声明后总是保证全局可用。
示例:
// in File A:
function check_if_mail() {
if ( ! empty( $_GET['mail'] ) ) {
class MyMail {}
// now I do some require_once() calls to extend the class.
}
}
// This function is not always executed...
if ( /* some_conditions */ ) {
check_if_mail();
}
// In File B:
if ( class_exists( 'MyMail' ) ) { // <-- will this work?
require_once 'template_mail.php';
} else {
require_once 'template_page.php';
}
“文件A”由我编写,而“文件B”在第三方库中。文件A也很大,本身就是一个类,所以我想尽可能保留函数/条件结构。
➜我需要确保文件B中的条件在PHP 5.6和7.0中正确触发。
答案 0 :(得分:1)
是否有特定原因要将它放入函数中,因为您无论如何都会立即调用该函数?为什么不直接使用它:
// in File A:
if ( ! empty( $_GET['mail'] ) ) {
class MyMail {}
// now I do some require_once() calls to extend the class.
}
// In File B:
if ( class_exists( 'MyMail' ) ) { // <-- will this work?
require_once 'template_mail.php';
} else {
require_once 'template_page.php';
}
PHP代码不需要封装在函数中。
编辑:根据您当前的编辑,将类移动到另一个文件,检查您的条件并运行包含可能会更好:
// class-my-mail.php
class MyMail {}
// in File A:
function check_if_mail() {
if ( ! empty( $_GET['mail'] ) ) {
require_once 'class-my-mail.php';
}
}
// This function is not always executed...
if ( /* some_conditions */ ) {
check_if_mail()
}
虽然这看起来有点......复杂。但简短的回答是'是'。只要在检查它之前包含该类,它在5.6和7中全局可用。虽然不再支持5.6,所以我不知道我会担心多少。
此外,您正在加倍文件A中的条件。您是否需要check_if_email
以外的条件?或者甚至在课外?
似乎所有这一切在课堂上都会更好。包括类,将验证放在类函数中并将参数传递给它。这将更加有条理,易于理解和延伸。因为现在你冒着在整个地方改变条件的风险,特别是涉及第三方代码。
答案 1 :(得分:1)
是
类定义(和函数定义)在PHP中是全局的。它们不是变量;在函数内定义一个函数不会将定义限制在该范围内。