• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

foreach循环中$p[] = $MaterialType 的疑点

php 搞代码 3年前 (2022-01-24) 24次浏览 已收录 0个评论

foreach循环中$p[] = $MaterialType 的疑问

<br />class so_getMaterialType<br />{<br />	var $CreateTime = '';<br />	var $IsDefault = '';<br />	var $UpdateTime = '';<br />}<br /><br /><br />$p = array();<br />$sql = 'SELECT * from tb where lid<50';<br />$re_materialTypeID = $db->getAll($sql);<br /><br />foreach($re_materialTypeID as $key => $val)<br />{<br />		$getMaterialType = new so_getMaterialType ;  //为什么每次循环都要新申请一遍,而不是放在循环外面申请一次即可??<br />		<br />		$getMaterialType->CreateTime =  $val['CreateTime'];<br />		$getMaterialType->IsDefault = $val['IsDefault'];<br />		$getMaterialType->UpdateTime = $val['UpdateTime'] ;<br /><br />		$p[] = $getMaterialType ;<br />}<br />var_dump($p);<br />return $p;<br />	<br />/*————————这种写法与上面差别是什么??———————————*/<br /><br />$getMater<a>2本文来源gao*daima.com搞@代#码&网6</a><pre>搞gaodaima代码

ialType = 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 {<br />  var $CreateTime = '';<br />  var $IsDefault = '';<br />  var $UpdateTime = '';<br />  function __construct($a) {<br />    foreach($a as $k->$v) $this->$k = $v;<br />  }<br />}<br /><br />$p = array();<br />$sql = 'SELECT * from tb where lid<50';<br />$re_materialTypeID = $db->getAll($sql);<br /> <br />foreach($re_materialTypeID as $key => $val) {<br />   $p[] = new so_getMaterialType($val) ;<br />}

——解决方案——————–

 $getMaterialType = new so_getMaterialType ;

关键字new会生成一个内存空间,该内存的地址赋给$getMaterialType,即$getMaterialType是一个指向前面内存空间的地址。所以,对象$getMaterialType就是指针。

$p[] = $getMaterialType ;

因为第一种写法没有改变$getMaterialType的值,所有p[]里所有元素指向同一块内存地址,数据当然也就一样了。
而第二种写法中,每次都会生成一个新的内存空间,并把地址赋给$getMaterialType,所以p[]中元素指向的是不同的内存空间。

简单来说:
只有$getMaterialType = ×××才会改变$getMaterialType值,$getMaterialType->属性 = ×××不会改变$getMaterialType的值


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:foreach循环中$p[] = $MaterialType 的疑点

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址