php中变量引用&不可与global共同使用
问题来源,新公司debug。
程序中代码大致如下
class Ci { private static $instance = NULL;
public $name = 'hello';
public $load = null; public function __construct()
{
self::$instance = &$this;
$this->load = new Load;
mlog(self::$instance, __LINE__);
//other code ....
$this->name = 'my name';
} public static function &getInstance()
{
return self::$instance;
}
} class My extends Ci{ public function __construct()
{
parent::__construct();
$this->model = new Model;
}
}
class Model { public function __construct()
{
$this->name = _get(); // null
mlog("success, and model->name = {$this->name}", __LINE__);
}
}
class Load { public $name = 'I am Load class'; public function getName()
{
return $this->name;
}
} $CI =& get_instance();
// mlog($CI->name); //hello
// mlog($CI->load->getName()); //I am Load class
mlog($CI, __LINE__);
$CI = new My;
mlog($CI, __LINE__); function _get()
{
//call static variables
global $CI; //non-boject
//return $CI->load->name(); // 500
return $CI->name; //notice
} function &get_instance()
{
return Ci::getInstance();
} function mlog($content, $line = __LINE__,$display = true)
{
$next_line = "<br />";
if (php_sapi_name() === 'cli') {
$init = '';
$next_line = "\n";
}
if ($display) {
echo $init;
echo "in line: $line" . $next_line;
print_r($content);
echo $next_line;
}
}
相信朋友们可以看出来,这是CI框架中的一部分,开发者为了封装方法所以在helper中使用如下代码
<?php
$CI =& get_instance(); function demo()
{
global $CI;
//return $CI->mehton; //notice
//return $CI->class->method;//500
}
服务器直接报了500。通过我第一部分的代码与注释,应该可以得出以下结论:在function的scope中global $ref是拿不到该引用的,php手册中也有说明,详情请看。干啥都不能不细心啊,好好学习基础^_^
php中变量引用&不可与global共同使用的更多相关文章
- python 中变量引用问题
普通变量,如a=10,str="fdaf",它们在函数内的值是不会被带到函数外的,除非在函数内加上global,而引用是惰性原则,从最近的同名父级同名变量引用值 其它变量如列表,字 ...
- 【PHP】 foreach循环中变量引用的一道面试题
$a = array('a','b','c'); foreach($a as &$v){} foreach($a as $v){ } var_dump($a); 现在.不要打开浏览器,猜测一下 ...
- php中引用&的真正理解-变量引用、函数引用、对象引用
php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. ...
- 内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例
内部类访问外部类的变量必须是final吗? 如下: package com.java.concurrent; class A { int i = 3; public void shout() { cl ...
- MyBatis mapper文件中的变量引用方式#{}与${}的差别
MyBatis mapper文件中的变量引用方式#{}与${}的差别 #{},和 ${}传参的区别如下:使用#传入参数是,sql语句解析是会加上"",当成字符串来解析,这样相比于$ ...
- JavaScript中var变量引用function与直接声明function
今天在h5开发app的过程中遇到了一个js问题,function的执行问题 在js中声明函数function有这两种方法 var A=function(){...} 或者 function A(){. ...
- Python中的变量引用对象需注意的几点
Python中的变量引用对象需注意的几点 分类:Python (55) (0) 普通引用: Python中,变量的作用仅仅是一个标识,只有赋值后才被创建,它可以引用任何类型的对象,而且在引用之前必须 ...
- JavaScript中变量的LHS引述和RHS引用
JavaScript中变量的LHS引述和RHS引用 www.MyException.Cn 网友分享于:2015-02-04 浏览:0次 JavaScript中变量的LHS引用和RHS引用 在Jav ...
- python中变量在内存中的存储与地址关系解析、浅度/深度copy、值传递、引用传递
---恢复内容开始--- 1.变量.地址 变量的实现方式有:引用语义.值语义 python语言中变量的实现方式就是引用语义,在变量里面保存的是值(对象)的引用(值所在处内存空间的地址).采用这种方式, ...
随机推荐
- mysql 5.5多实例部署
mysql5.5数据库多实例部署,我们可以分以下几个步骤来完成. 1. mysql多实例的原理 2. mysql多实例的特点 3. mysql多实例应用场景 4. mysql5.5多实例部署方法 一. ...
- numpy基础知识
官网简介: http://www.numpy.org/ ndarry基本属性 ndarry是Numpy中的N维数组对象(N dimentional arrya,ndarray) ndarry中所有的元 ...
- win下写任务提交给集群
一,复制和删除hdfs中的文件 import org.apache.hadoop.fs.{FileSystem, Path} import org.apache.spark.{SparkConf, S ...
- webpack的配置文件entry与output
在webpack.config.js中entry是唯一入口文件 entry也可以是一个数组 如果是一个数组,会将数组里面的文件一起打包到bundle.js entry也可以是一个对象. 如果outpu ...
- Django——如何使用Template以及如何向template传递变量
如何使用模板系统 在Python代码中使用Django模板的最基本方式如下: 可以用原始的模板代码字符串创建一个 Template 对象, Django同样支持用指定模板文件路径的方式来创建 Temp ...
- 【Python3 爬虫】11_报错No module named 'requests'
从网上下载了一段源码,执行过程中报错: No module named 'requests' 一看英文就明白是咋回事了~ 是由于:没有模块requests 解决方案 打开cmd,在窗口运行命令:pip ...
- mysql-This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
这次国庆节回来后的测试中,在一个Mysql表达式中使用嵌套查询,出现了这个错误.原因是内层select语句带有limit子句. 在网上查了下,有文章指出: 比如这样的语句是不能正确执行的. s ...
- Android五大布局标签和属性总结
1.LinearLayout orention 水平和垂直 weight 切割闲置空间 水平布局 切割宽度 垂直布局 切割的高度 切割的时候 指定的高度或者宽度不能用fill_parent/ ...
- js基础 js自执行函数、调用递归函数、圆括号运算符、函数声明的提升 js 布尔值 ASP.NET MVC中设置跨域
js基础 目录 javascript基础 ESMAScript数据类型 DOM JS常用方法 回到顶部 javascript基础 常说的js包括三个部分:dom(文档document).bom(浏览器 ...
- gradle多渠道打包及友盟统计-eclipse版本
在进行渠道打包的之前,先看看准备篇,知道打包为了什么. 参见1.0android批量打包认知. eclipse中使用gradle多渠道打包全部流程 一.生成gradle文件,配置本地的gradle环境 ...