关于PHP字符串的一道面试题

咱们来看一段简单的代码:php

<?php
$str = 'php';
$str['name'] = array('dogstart');
var_dump($str);
复制代码

认真思索下,上面的代码会输出什么?若是你已经有答案了,那么就能够关闭这遍文章了,不然我们一步一步的来看看最终会输出什么。数组

基础回顾

在开始作题前,咱们先来想一想php中存在的变量类型:bash

  • Boolean 布尔类型
  • Integer 整型
  • Float 浮点型
  • String 字符串
  • Array 数组
  • Object 对象
  • Resource 资源类型
  • NULL
  • Callback / Callable类型

参考文档:PHP类型spa

在PHP中string的实现方式是一个由字节组成的数组再加上一个整数指明缓冲区长度(注意,PHP是不能改变原字符串长度的)。.net

咱们接着来看咱们的题目,第一行代码很正常,关键的部分是在第二行:code

$str['name'] = array('dogstart');
复制代码

咱们先看等号左边的代码,既然PHP的字符串是由数组组成的,咱们知道PHP中数组的key能够是integer和string,可是在字符串中,咱们只能经过integer 下标来访问每一个字符,因此这个地方的'name'最终会被转换成数字:对象

intval('name');
复制代码

PHP文档中定义了,字符串转为数字时,字符串的开始部分决定了转换后的值。若是该字符串以合法的数值开始,则使用该数值,不然为0。资源

因此上面的代码的最终结果为0,利用数学中的代入法,第二行的代码就变成了:文档

$str[0] = array('dogstar');
复制代码

咱们接下来再看看第二行右边的代码,因为字符串中只能存在字符串,因此右边的代码会被转换成字符串:字符串

strval(array('dogstar'));
复制代码

转换结果为'Array',这个时候第二行代码就成了:

$str[0] = 'Array';
复制代码

因为字符串长度是固定的,因此这个地方只能存放一个字符,因此'Array'中的字符赋值到$str[0]中只会保留第一个字符,其他的都将被抛弃。因此咱们的代码就变成了:

<?php
$str = 'php';
$str[0] = 'A';
var_dump($str);
复制代码

这个时候就能够一眼看出最终的输出结果为'Ahp'。

相关文章
相关标签/搜索