博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php的autoload与global
阅读量:4077 次
发布时间:2019-05-25

本文共 1336 字,大约阅读时间需要 4 分钟。

loserwn同学最近在测试一个新的东东,发现在一个文件里调用的global变量不起作用:

 

a.php:

$g_v = 'aa';function g_test(){    var_dump($g_v);}

 

b.php:

include('a.php');class xxx{    public function run(){        g_test();        //结果是NULL    }}

 

    从理论上来讲,a.php中的代码没有任何问题,b.php直接调用的是全局函数,应该也没有问题啊,可是死活就是获取不到全局变量的值,然后在a中调用g_test(),单独运行a.php,没有问题;单独写一个文件include,然后调用g_test(),也没有问题,直接google ”php global“也没有找到有用的信息,后来仔细一想,有可能跟类的autoload有关,又仔细阅读了php关于autoload的手册,在”EXAMPLE“部分看到有人提到这个问题:

 

While using an "autoloading" method you should pay attention to variables scope. Because of new file will be included INSIDE of magic function __autoload - all of declared in such file global scope variables will be only available within this function and nowhere else. This will cause strange behaviour in some cases.

 

大意是:当使用autoload方法时,要格外注意变量的作用域。由于新文件是在_autoload函数里进行include,所以include的“新文件”中的“全局变量”就成了__autoload函数的局部变量,只能在__autoload函数作用域内引用。在某种情况下可能会导致一些奇怪的现象。

 

     我们的项目使用了框架,自然会用到autoload,所以也就导致了无法获取global变量的情况,也就是说,实际的代码是:

__autoload(){        inlucde(b.php);              --include(a.php);              //已经是局部变量              --$g_v = 'aa';              --function g_test(){                              --    //全局变量没有$g_v              --    global $g_v;              --    var_dump($g_v);              --}         g_test();}
 

这是一个很麻烦的问题,php官网应该将这个内容加到__autoload或者global的说明文档中,而不是以example的方式。

转载地址:http://oxsni.baihongyu.com/

你可能感兴趣的文章
现在再看《视觉SLAM十四讲》很多概念都熟悉了
查看>>
基于opencv的ArUco的视觉定位之ArUco安装
查看>>
一种视觉引导的作业型飞行机器人设计
查看>>
基于单目视觉的实时高精度定位方法研究
查看>>
关于PNP个人的一些搜集
查看>>
我眼中的视觉SLAM(转载)SLAM的本质就是一个状态估计问题,整个过程可以由一个运动方程和一个观测方程来描述
查看>>
ArUco使用(这里面写清楚了marker检测流程,明确说了位置检测用的pnp)
查看>>
aruco不是opencv里的代码,而是一个单独的项目,依赖于opencv,需要单独下载编译安装。这也是为什么opencv里面搜不到aruco.hpp等文件
查看>>
这个博主对ARUCO的视觉定位有一系列文章可以看看
查看>>
基于ArUco的视觉定位(二)(转载)(这篇很详细地讲清楚了原理)
查看>>
可以确认ARUCO检测进行位置估计是用的PNP
查看>>
只要获得 特征点的世界坐标(三维坐标)、2D坐标(像素坐标)、相机内参矩阵、相机畸变参数矩阵 以上四个参数即可以解得相机与标志物之间的外参(R旋转矩阵、T位置矩阵)
查看>>
ORB特征,ORBSLAM的ORB现在知道其实是一个图像检测里面的普通词汇。
查看>>
标定之相机的内参和外参
查看>>
刚刚发现《OpenCV4快速入门》里面有讲到pnp
查看>>
我忽然想到,标定的原理是不是就是利用的pnp?
查看>>
ROS_PACKAGE_PATH总结一下到底什么时候要添加,还有Python写的功能包怎么添加环境变量?
查看>>
通过ROS开启Gazebo的世界(这篇写得不错,教会了我怎么自己建一个gazebo的功能包,建立世界模型,导入机器人模型,通过roslaunch启动,值得细读真正学会!)
查看>>
ROS摄像机的标定(这里很好的一点就是给出了标定结果的各个参数的含义,这个很多都没讲)
查看>>
实际好像只用到了相机内参矩阵和畸变参数?
查看>>