【验证】仅通过a.php要求c.php,b.php是否可以在没有要求c.php的情况下使用?
这次我对于PHP的规范有一个疑问,如果在某处使用require一次,那么其他文件是否可以不必再使用require呢,所以我进行了调查。
更具体地说,我想验证一下在a.php中只要使用require引入c.php,是否可以在b.php中不使用require而直接使用c.php。
准备实验
为了进行验证,将a、b、c的文件准备在WEB服务器的同一目录下。
#c.phpを読み込んだ後インスタンス化
#そのあとb.phpを読み込んで返却してもらった文字列を表示する。
<html><h1>
<?php
require "c.php";
$c = new c;
echo require "b.php";?>
</h1></html>
#a.phpから呼び出されたらc.phpに定義してあるcクラスをインスタンス化する。
#b.phpではc.phpをrequireせずとも問題なく実行できるか確認
#実行できれば成功を返却
<?php
$c = new c;
return "成功";
?>
#インスタンス化されたいだけなので空のクラスで十分
<?php
class c{}
实验结果
总结
只需要在a.php中require c.php,然后b.php就可以在没有require c.php的情况下使用!尽管这点让我有点困惑,但是我终于弄明白了,感到舒畅!
※2022/4/23新增
有网友在评论中指出,require函数也有作用域,并不是一旦使用一次就可以在任何地方使用的。根据他们的指正,我发表了一篇关于这个问题的确认文章。请将其与这篇评论一起查看。
给予额外的奖励
如果在a.php中刪除c.php的require語句,然後不對b.php和c.php做任何修改,重新在瀏覽器中訪問a.php時…
<html><h1><?php
//require "c.php";
//$c = new c;
echo require "b.php";
?></h1></html>
当使用b.php中的第二行c.php时,会自然地发生错误。
<?php
$c = new c;
return "成功";
?>