我是PHP的新手,在使用require时遇到问题。
在Config.php中:
<?php
$host = "localhost";
$username = "admin";
在LaptopModel.php中:
<?php
require '../../Config.php';
在LaptopController.php中:
<?php
require '../Model/test/LaptopModel.php';
问题是当服务器处理这个文件时,LaptopController.php中的代码到底是什么? 我以两种方式思考这个问题,导致错误与否。
<?php
require '../../Config.php';// get the original code from required file
//this cause an error, because from LaptopController.php
//the link to Config.php must be '../Config.php'
或者它将是:
<?php
$host = "localhost";
$username = "admin";
//get what was required from Laptopmodel.php file, not the original code
答案 0 :(得分:3)
对你问题部分要求真正做的很简单...... 如果文件丢失或找不到它将产生致命错误并停止执行脚本
答案 1 :(得分:2)
问题是当服务器处理这个文件时,LaptopController.php中的代码到底是什么?
文件LaptopController.php
包含您在其中编写的内容。
PHP解释器不会更改文件的内容,也不会更改磁盘上的内容,也不会在内存中加载它。
require
无法像复制/粘贴一样工作。它更像是一个函数调用(但它没有像函数那样引入局部作用域)。
编译LaptopController.php
的代码时,语句require '../Model/test/LaptopModel.php';
将转换为一个操作码,表示“加载并执行此文件中的代码”。
编译阶段不会读取和编译LaptopModel.php
中的代码。它甚至不检查文件(../Model/test/LaptopModel.php
)的路径是否存在。所有这些都发生在运行时,如果执行点到达require
语句。
您可以轻松验证:将require
语句放入if
语句,并确保所需文件有语法错误(或不存在)。如果执行包含if
的{{1}}分支,则会触发致命错误并且脚本结束。否则它会愉快地运行,因为require
语句没有被执行。
require
答案 2 :(得分:0)
通常,所有内容都与您最初加载的PHP文件(工作目录)的路径相关。运行命令getcwd()
以查看它从哪里尝试加载文件。在这种情况下,它看起来像是基于index.php
所在的目录。
getcwd - 获取当前工作目录
有关include的信息(他们所指的当前目录是当前工作目录):
如果定义了一个路径 - 无论是绝对路径(从Windows上的驱动器号或者\或Unix / Linux系统上的/开始)还是相对于当前目录(以。或..开头) - include_path将被忽略共。例如,如果文件名以../开头,则解析器将查找父目录以查找所请求的文件。