在php中真正需要做什么

时间:2016-01-08 07:02:04

标签: php require

我是PHP的新手,在使用require时遇到问题。

Folder structure

  • ' CONFIG.PHP'在父文件夹中
  • 模型包含测试,其中' LaptopModel.php'是
  • Controller包含文件' LaptopController.php'

在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

3 个答案:

答案 0 :(得分:3)

对你问题部分要求真正做的很简单...... 如果文件丢失或找不到它将产生致命错误并停止执行脚本

来源:http://www.w3schools.com/php/php_includes.asp

答案 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 - 获取当前工作目录

     

链接 http://php.net/getcwd

有关include的信息(他们所指的当前目录是当前工作目录):

  

如果定义了一个路径 - 无论是绝对路径(从Windows上的驱动器号或者\或Unix / Linux系统上的/开始)还是相对于当前目录(以。或..开头) - include_path将被忽略共。例如,如果文件名以../开头,则解析器将查找父目录以查找所请求的文件。

     

链接 http://php.net/manual/en/function.include.php