【问题标题】:What does require really do in php什么需要在php中真正做
【发布时间】:2016-01-08 07:02:03
【问题描述】:

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

  • 'Config.php' 在父文件夹中
  • 模型包含测试,其中'LaptopModel.php'是。
  • 控制器包含文件'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

【问题讨论】:

  • 谢谢。我知道
  • 只是一个提示:使用__DIR__ 作为当前文件的路径,所以你总是需要相对于它所在的文件,而不是调用它的文件。

标签: php require


【解决方案1】:

就你的问题而言,Require 真正做的事情很简单...... 如果文件丢失或找不到它将产生致命错误并停止脚本的执行

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

【讨论】:

  • 他问题的真正意义在于require如何解析相对路径名。
【解决方案2】:

问题是当服务器处理这个文件时,LaptopController.php 中的代码到底是什么?

文件LaptopController.php 包含您在其中写入的内容。 PHP 解释器不会更改文件的内容,无论是在磁盘上还是在将文件加载到内存中时。

require 不像复制/粘贴那样工作。它更像是一个函数调用(但它不像函数那样引入本地范围)。

LaptopController.php的代码被编译时,语句require '../Model/test/LaptopModel.php';被转换成一个操作码,上面写着“加载并执行这个文件中的代码”。

LaptopModel.php 的代码在编译阶段不会被读取和编译。它甚至不检查文件的路径 (../Model/test/LaptopModel.php) 是否存在。所有这些都发生在运行时,如果执行点到达require 语句。

您可以轻松验证这一点:将require 语句放入if 语句并确保所需文件有语法错误(或不存在)。如果执行包含requireif 分支,则会触发致命错误并结束脚本。否则因为require语句没有被执行,所以它运行得很愉快。

// File 'a.php' doesn't exist
if (false) {
    // This statement never runs, no error is triggered
    require 'a.php';
}

【讨论】:

  • 谢谢。正是我正在考虑的。但是编译器输出一个文件不存在的错误。嗯。
【解决方案3】:

通常,所有内容都与您最初加载的 PHP 文件(您的工作目录)的路径相关。运行命令getcwd() 以查看它尝试从哪里加载文件。在这种情况下,它看起来像是基于 index.php 所在的目录。

getcwd — 获取当前工作目录

链接 http://php.net/getcwd

关于包含的信息(他们所指的当前目录是当前工作目录):

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 2021-05-14
    相关资源
    最近更新 更多