php sleep usleep php usleep php使用
# 如何在回调函数中访问外部的变量在swoole _服务器/swoole _客户端的事件回调函数中,需要读取调用外部的变量和对象,可以通过下面的几种方法实现。* * * * *[TOC=2,3]*
顺晟科技
2022-09-15 20:06:00
157
这是我的项目结构,
我尝试从 view/index.php 中通过 controller 从 model 获取数据后显示到 display.php 上,
view/index.php
controller/Controller.php
奇怪的是,在 model/Model.php 文件中,我发现 include_once("DBConn.php") 可以正确显示数据(DBConn.php会去连接mysql, 里面有一个$mysqli的变量),但 include_once("./DBConn.php") 或者 include_once("model/DBConn.php") 都不行,这是为什么呢?
model/Model.php
include_once 的路径机制是怎样的?为什么有时候绝对路径可以,有时相对路径可以?
由于我直接在云服务器商提供的LAMP环境开发的,没有任何错误提示,所以Debug过程非常痛苦。
更新:这个相对路径似乎和我访问路径有关
的确与你想的一样: require_once()
取决于入口文件(第一个访问的文件)所在位置。官方文档中提到一嘴:
解决办法如下:
// 获取当前文件的绝对路径
define('__DIR__', dirname(__FILE__));
// 示例1
require_once(__DIR__. '/foo/bar.php');
// 示例2
require_once(__DIR__. '/../foo/bar.php');
基本的思想是:
将相对路换径换成绝对路径动态获取绝对路径而不是直接写绝对路径(/usr/local/xxx/xxx),以避免应用部署在不同的服务器或是不同的位置时发生错误。这样以来,无论无哪个文件访问调用,便都可以在执行require_once()
时解析正常的路径了。
另外原生的PHP 仅适用于学习阶段,如果真想用PHP开发项目,还得上框架:ThinkPHP5.0入门实例教程推荐一下。
跟入口文件相关,./ 是当前目录,是指入口文件的当前目录
先说明,include_once 和 include 的区别仅在于,当多次调用时,前者只会包含一次,后者会包含多次。另外 require 和 include 的区别仅在于,前者当无法找到文件时,会同时报警告+错误,并停止执行后面的代码,而 include 则会报警告,然后继续执行后面的代码。
根据文档描述这里的问题,应该归结于 include 中 include_path 这样一个概念,默认情况下, include_path 中包含了 .
及当前位置。所以可以找到。
但是,我测试的时候发现即使去掉,也还是能找到,文档中没有对此做过多的介绍了
被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头)——include_path 都会被完全忽略。例如一个文件以 ../ 开头,则解析器会在当前目录的父目录下寻找该文件。PHP: include - Manual
加载类定义, 不要使用 类似include的语句, 请在入口文件中, 注册spl_autoload_register
自动加载逻辑.
显示模板也不要到处include, 把包含逻辑放到一个函数或类中统一处理. 使用绝对路径定义模板文件.
30
2022-11
30
2022-11
30
2022-11
17
2022-11
17
2022-11
31
2022-10