foreach循环中$p[] = $MaterialType 的疑问 我在用amf2.1.1 与flex通讯,产生的问题,调试过程中,传递这样类的数组总是有问题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一段代码$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) ;} 比如循环了10次,第一种写法保存了so_getMaterialType的10个对象,第二种写法只保存了一个对象,所以第二种写法里得到的数组值是一样的。这就好比下面这一段代码:$value = 10;$array[0] = $value;$value=12;$array[1] = $value;print_r($array);得到的结果必然是两个12 终于和flex通了一个函数,谢谢楼主。 第15行: $getMaterialType = new so_getMaterialType ; //为什么每次循环都要新申请一遍,而不是放在循环外面申请一次即可?? 你的意思是,如果只申请一次new so_getMaterialType 那么数组p中的每个类对象都是一样的值,对吧,我在跟踪过程中的确是这样的, $p[] = $getMaterialType ; 这里,p[] 理解成数组的指针? ,指向10个类对象,对么? $getMaterialType = new so_getMaterialType ;关键字new会生成一个内存空间,该内存的地址赋给$getMaterialType,即$getMaterialType是一个指向前面内存空间的地址。所以,对象$getMaterialType就是指针。$p[] = $getMaterialType ;因为第一种写法没有改变$getMaterialType的值,所有p[]里所有元素指向同一块内存地址,数据当然也就一样了。而第二种写法中,每次都会生成一个新的内存空间,并把地址赋给$getMaterialType,所以p[]中元素指向的是不同的内存空间。简单来说:只有$getMaterialType = ×××才会改变$getMaterialType值,$getMaterialType->属性 = ×××不会改变$getMaterialType的值 你使用了构造函数赋值 __construct($a),,,,,我这样是正常的,但我程序比较复杂,不用构造函数赋值,而是像我第一种写法那样赋值,再压入数组,但值就不正常了,在flex中跟踪发现,并没有赋值过去,而是都变成了object 。这里怎么办呢??求解!我在http://127.0.0.1/amfphp-2.1.1/BackOffice/ServiceBrowser.php中测试都正常,但在实际flex中就不正常。 php怎么将查询结果写入数据库表中 关于while循环里为什么数据只显示最后一条呢? PHP下载文件后文件出错!!! 输出数据的问题 高手救命呀! 如何修改xml节点的值 用PHP能够读取ttf字体的信息吗?! 我在公司电脑上装的apache1.3.9,输入ip后,弹出一个输入账号密码的框框 关于PHP和ASP融合的问题 [求助]关于mysql搜索 各位大侠,通过php 读取字符串 求帮忙 求一个匹配到这个数组所有成员的正则
$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) ;
}
$array[0] = $value;
$value=12;
$array[1] = $value;
print_r($array);得到的结果必然是两个12
第15行:
$getMaterialType = new so_getMaterialType ; //为什么每次循环都要新申请一遍,而不是放在循环外面申请一次即可??
你的意思是,如果只申请一次new so_getMaterialType 那么数组p中的每个类对象都是一样的值,对吧,我在跟踪过程中的确是这样的,
$p[] = $getMaterialType ; 这里,p[] 理解成数组的指针? ,指向10个类对象,对么?
关键字new会生成一个内存空间,该内存的地址赋给$getMaterialType,即$getMaterialType是一个指向前面内存空间的地址。所以,对象$getMaterialType就是指针。$p[] = $getMaterialType ;
因为第一种写法没有改变$getMaterialType的值,所有p[]里所有元素指向同一块内存地址,数据当然也就一样了。
而第二种写法中,每次都会生成一个新的内存空间,并把地址赋给$getMaterialType,所以p[]中元素指向的是不同的内存空间。简单来说:
只有$getMaterialType = ×××才会改变$getMaterialType值,$getMaterialType->属性 = ×××不会改变$getMaterialType的值
你使用了构造函数赋值 __construct($a),,,,,我这样是正常的,但我程序比较复杂,不用构造函数赋值,而是像我第一种写法那样赋值,再压入数组,但值就不正常了,在flex中跟踪发现,并没有赋值过去,而是都变成了object 。这里怎么办呢??求解!我在http://127.0.0.1/amfphp-2.1.1/BackOffice/ServiceBrowser.php
中测试都正常,但在实际flex中就不正常。