foreach循环中$p[]=$MaterialType的疑点
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了foreach循环中$p[]=$MaterialType的疑点,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2202字,纯文字阅读大概需要4分钟。
内容图文
![foreach循环中$p[]=$MaterialType的疑点](/upload/InfoBanner/zyjiaocheng/231/7f3bca021e93466fac647c49bbe1bf59.jpg)
class so_getMaterialType
{
var $CreateTime = '';
var $IsDefault = '';
var $UpdateTime = '';
}
$p = array();
$sql = 'SELECT * from tb where lid<50';
$re_materialTypeID = $db->getAll($sql);
foreach($re_materialTypeID as $key => $val)
{
$getMaterialType = new so_getMaterialType ; //为什么每次循环都要新申请一遍,而不是放在循环外面申请一次即可??
$getMaterialType->CreateTime = $val['CreateTime'];
$getMaterialType->IsDefault = $val['IsDefault'];
$getMaterialType->UpdateTime = $val['UpdateTime'] ;
$p[] = $getMaterialType ;
}
var_dump($p);
return $p;
/*————————这种写法与上面差别是什么??———————————*/
$getMaterialType = array();
$getMaterialType[] = new so_getMaterialType ;
$sql = 'SELECT * from tb where lid<50';
$re_materialTypeID = $db->getAll($sql);
foreach($re_materialTypeID as $key => $val)
{
$getMaterialType[$key]->CreateTime = $val['CreateTime'];
$getMaterialType[$key]->IsDefault = $val['IsDefault'];
$getMaterialType[$key]->UpdateTime = $val['UpdateTime'] ;
}
var_dump($getMaterialType);
return $getMaterialType;
------解决方案--------------------
第一段代码
$p 是一个含有若干个 so_getMaterialType 对象的数组
第二段代码
$getMaterialType 的第一个元素是 so_getMaterialType 对象,其余的是 stdClass 对象
显然你需要的是第一种写法的结果
因此可以
class so_getMaterialType {
var $CreateTime = '';
var $IsDefault = '';
var $UpdateTime = '';
function __construct($a) {
foreach($a as $k->$v) $this->$k = $v;
}
}
$p = array();
$sql = 'SELECT * from tb where lid<50';
$re_materialTypeID = $db->getAll($sql);
foreach($re_materialTypeID as $key => $val) {
$p[] = new so_getMaterialType($val) ;
}
------解决方案--------------------
$getMaterialType = new so_getMaterialType ;
关键字new会生成一个内存空间,该内存的地址赋给$getMaterialType,即$getMaterialType是一个指向前面内存空间的地址。所以,对象$getMaterialType就是指针。
$p[] = $getMaterialType ;
因为第一种写法没有改变$getMaterialType的值,所有p[]里所有元素指向同一块内存地址,数据当然也就一样了。
而第二种写法中,每次都会生成一个新的内存空间,并把地址赋给$getMaterialType,所以p[]中元素指向的是不同的内存空间。
简单来说:
只有$getMaterialType = ×××才会改变$getMaterialType值,$getMaterialType->属性 = ×××不会改变$getMaterialType的值
内容总结
以上是互联网集市为您收集整理的foreach循环中$p[]=$MaterialType的疑点全部内容,希望文章能够帮你解决foreach循环中$p[]=$MaterialType的疑点所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。