PHP 中的数组字符串貌似并不是对象类型, 需要使用关键字 object
转化才能成为对象, 这点和 OC 有很大的区别
0x01- 字符串
字符串有四种使用的方式:
单引号
$str = ''; // 这种创建的字符串不可以引用其他变量
eg:
$str1 = '12';
$str2 = '$str1';
这时候使用 echo 的话, 打印的结果为: $str1
双引号
$str = ""; // 这种创建的方式可以引用其他变量
eg:
$str1 = '12';
$str2 = "{$str1}";
此时打印的结果为: 12
* 这种引用的方式要加 {} , 因为习惯😂
heredoc 语法
// 其实就是双引号的方式
$heredoc = <<<"LIST"
<ul>
<li>你好</li>
<li>Hello World</li>
<li>no 不</li>
</ul>
LIST;
echo $heredoc;
nowdoc 语法
// 和单引号一样的
$nowDoc = <<<'List'
<ul>
<li>你好</li>
<li>Hello World</li>
<li>no 不</li>
</ul>
List;
0x02 - 数组
数组被分为了索引数组和关联数组, 经过学习, 发现就是 OC 中的字典, 并且不会出现越界的现象, 而且现在大多使用的是字面量的方式创建
0x01 索引数组
$arr1 = [1, 2, 34, 45];
$arr2 = ['s', 'sd', 'aa', '是'];
$arr3 = [0 => 'ss', 1 => 'ss', 2 => 'ss', 3 => 'ss',];
这三个数组都是可以理解为角标从 0 --> 3 的数组,
$arr3 = [0 => 'ss', 3 => 'ss', 4 => 'ss', 9 => 'ss',];
这个数组就和我们的字典很像了, 是存在 key => value 的
ps: 数组中的 key 若是有相同的, 后面的则会覆盖前面的值, 数组常用 print_r($arr)
来输出数组
0x02 - 关联数组
$arr = ['id' => 'peter', 'name' => 'jim', 'ii' => '11'];
关联数组, 完全是靠 key 去寻找 value, 也等价于我们的 NSDictionary
0x03 - 增删改查
$arr = ['id' => 'peter', 'name' => 'jim', 'ii' => '11'];
- 增
$arr[] = 'gender'; // 在最后面插入 key = 0 , value = 'gender' 的元素
$arr[8] = 'gender'; // 在最后面插入一个 key = 8 , value = 'gender' 的元素
$arr['gender'] = 1; // 在最后面插入一个 key = gender , value = 1 的元素
- 删
unset($arr['id']); // 删除数组中的一个
// 删除数组中所有的值
foreach ($arr as $key => $value) {
unset($arr[$key]);
}
- 改
$arr['ii'] = 'gender'; // 修改 key = ii 的 vlaue 为 gender
- 查
0x03 - 对象
class Person
{
public $name = 'Peter';
public $age = 29;
public $gender = '男';
public function description()
{
return '我是'.$this->name;
}
}
$obj = new Person;
echo "$obj->name";
echo $obj->description();
一定要注意箭头是使用, 还有 public 权限
$objc = new stdClass();
$objc->name = '你好';
$objc->action = function ()
{
return 'action start';
};
echo $objc->name;
echo call_user_func($objc->action);
通用的创建对象, 此时的 aciton 是属性, 也是方法, 和我们OC 的 block 很像, 估计以后的 this 会出现指向问题