类似Python的独立与库使用PHP检查

类似Python的独立与库使用PHP检查,php,Php,我知道Python有name=“\uuuuu main\uuuuuu”检查来测试脚本是作为独立的执行单元调用还是包含在另一个文件中用作库。PHP有类似的测试吗?一种方法是: define('ASLIBRARY', true); require('foobar.php'); 在foobar.php中 $aslibrary = defined('ASLIBRARY'); if (!aslibrary) { .... } 如果PHP提供类似的东西,这显然是多余的 像这样的方法应该会奏效:

我知道Python有name=“\uuuuu main\uuuuuu”检查来测试脚本是作为独立的执行单元调用还是包含在另一个文件中用作库。PHP有类似的测试吗?一种方法是:

define('ASLIBRARY', true);
require('foobar.php');
在foobar.php中

$aslibrary = defined('ASLIBRARY');
if (!aslibrary) {
    ....
}

如果PHP提供类似的东西,这显然是多余的

像这样的方法应该会奏效:

if( $_SERVER['SCRIPT_FILENAME'] == __FILE__)
$\u服务器['SCRIPT\u FILENAME']
引用当前正在执行的脚本-如果我们在包含的文件中,这仍然引用初始脚本,即执行包含操作的脚本

另一方面,
\uuuuuu FILE\uuuuuu
是一个神奇的常量,它将始终是当前文件,无论是包含还是直接运行

如果它们是相同的,那么我们就在直接调用的脚本中


否则。。。好吧,你明白了:)

我想你可以用
$argv[0]
\uuuu FILE\uuuu
getcwd
进行详细的检查,但在我看来,让一个文件根据最初的调用方式有不同的行为似乎是个坏主意。
$\u SERVER['PHP\u SELF]
是相对于文档根的。请改为尝试
$\u服务器['SCRIPT\u FILENAME']
。但是,如果从命令行调用脚本,这两种方法都不起作用。@geomagas哎呀,关于
script\u文件名
的事情你说得对。编辑。另一方面,我一直使用命令行中的
$\u SERVER
变量,虽然它们并不都在那里,但原因很明显(
REMOTE\u ADDR
),例如,它们中的许多都在。你可能是对的。我现在必须赶时间,所以我把确认部分留给别人了。无论如何,投票结果都是上升的!:)@geomagas-已验证$_服务器是为PHP_SELF和SCRIPT_FILENAME定义的,至少在通过cmd行调用时也是如此!谢谢!:)请注意,如果要将其作为函数,例如
isParentScript()
,则必须将
\uuuu FILE\uuuu
作为参数传递,否则它将是函数在:p中定义的任何文件