PHP对象强制转换数组的坑

最近在写前端页面模板时,需要用fms提交json数据到服务器端用fms-smarty模拟解析渲染smarty模板。希望构造了类似两个数组
$ids = [1,2,3];
$idTypes=[‘1’ => ‘a’, ‘2’ => ‘b’, ‘3’ => ‘c’];

在模板中直接以$idTypes[$ids[0]]取出类型来。但是实际构造出来后,发现前端报错“Notice: Undefined offset: 1 in ………”,用var_dump($idTypes) 和 ids[0] 都正常有值,但是两个组合$idTypes[$ids[0]]就取不出值了。最后看了fms-smarty代码是json_decode($_POST[‘_fms’])对象后用(array)强制转换成了PHP数组,就想想为啥不直接json_decode($_POST[‘_fms’], true)直接转换,后来试了下居然能够正常解析,以下是我构造的整个流程代码原型

<?php

    $arr = ['1' => 'test_1', 'name' => 'test_name'];
    $json = json_encode($arr);

    $data = json_decode($json);
    $data = (array) $data;

    $data2 = json_decode($json, true);
    

    echo '<pre>';

    echo '---------- arr --------- <br>';
    var_dump($arr);
    var_dump($arr['1']);

    echo '<br>---------- data --------- <br>';
    var_dump($data);
    var_dump($data['1']);

    echo '<br>---------- data 2 --------- <br>';
    var_dump($data2);
    var_dump($data2['1']);

    
    echo '</pre>';
?>

可以看到输出结果var_dump($data[‘1’]);报错了: 继续阅读剩余部分>>

从表单提交看“软件开发及测试中的边界问题”

Case: 有一个PHP后台表单功能,可以绑定50个商品的url及其他数据。今天有用户反馈出Bug. 当添加30个商品保存后商品数据丢失。我就自己测试了下添加了12个商品保存正常,当商品添加到30个时保存果然就消失了。开始以为是逻辑中有数量限制错误,检查后发现没有问题。

以前呢也遇到过POST保存失败的问题的几个case: 继续阅读剩余部分>>

Parse error: syntax error, unexpected ‘(‘, expecting ‘)’

最近写代码时发现PHP报错了Parse error: syntax error, unexpected ‘(‘, expecting ‘)’ in …,可是看代码貌似有看不出啥问题

<?php

class A {

	private static $arr = array(
		'name' => 'test',
		'time' => date()
	);

	public function index()
	{
		var_dump(self::$arr);
	}
}

$a = new A();
$a->index();

?>

运行就抛出 Parse error: syntax error, unexpected ‘(‘, expecting ‘)’ in …
继续阅读剩余部分>>

codeigniter use namespace library

最近有需求生成唯一的邀请码给用户,前些天用Node.js给公司开发项目时同事用过一个Hashids类库来生成唯一的验证码(可参考:http://hashids.org/)。这次使用的框架是PHP的Codeigniter(简称CI)框架。目前最新CI框架3.0.x还不支持命名空间。而这个Hashids的PHP版本用到了命名空间。

首先,想将这个Hashids作为一个类库,使用$this->load->library(‘Hashids’);加载,试验了下,需要直接require指定的类文件才可以使用。感觉应该有更好地解决办法。google搜索了下,看到用的是spl_autoload_register来实现的自动加载类库。

具体代码如下: 继续阅读剩余部分>>