Home Backend Development PHP Tutorial PHP中用下标符号[]去读取字符串的逻辑

PHP中用下标符号[]去读取字符串的逻辑

Jun 23, 2016 pm 01:48 PM
php subscript string read logic

PHP中 [(下标)] 符号不仅可以应用于数组和对象,还可以应用于字符串,如果不注意很容易出错。

比如获取一个网络接口,正常情况下会返回一个数组结构的json,经过解析之后结果为:

array('content' => 'This is returned by interface')
Copy after login


我们获取到接口数据之后,通过以下语句来判断content是否有值的话,就会有问题:

if (!empty($result['content']))    echo $result['content'];
Copy after login

因为但是如果服务器异常,可能会返回下面的HTML字符串:

            <title>505</title>                Service Internal Error    
Copy after login

这种情况下,经过json_decode解析我们如果使用上面的语句,就会获得一个

我们来看一下 PHP5.2.5 中 [] 作用于字符串的逻辑:

.......        case IS_STRING: {                zval tmp;                 if (dim == NULL) {                    zend_error_noreturn(E_ERROR, "[] operator not supported for strings");                }                    if (Z_TYPE_P(dim) != IS_LONG) {                    switch(Z_TYPE_P(dim)) {                        /* case IS_LONG: */                        case IS_STRING:                        case IS_DOUBLE:                        case IS_NULL:                        case IS_BOOL:                            /* do nothing */                            break;                        default:                            zend_error(E_WARNING, "Illegal offset type");                            break;                    }                        tmp = *dim;                    zval_copy_ctor(&tmp);                    convert_to_long(&tmp);                    dim = &tmp;                }                    switch (type) {                    case BP_VAR_R:                    case BP_VAR_IS:                    case BP_VAR_UNSET:                        /* do nothing... */                        break;                    default:                        SEPARATE_ZVAL_IF_NOT_REF(container_ptr);                        break;                }                    if (result) {                    container = *container_ptr;                    result->str_offset.str = container;                    PZVAL_LOCK(container);                    result->str_offset.offset = Z_LVAL_P(dim);                    result->var.ptr_ptr = NULL;                    if (type == BP_VAR_R || type == BP_VAR_IS) {                        AI_USE_PTR(result->var);                    }                    }                    return;            }                break;......
Copy after login

上面源码中:dim 表示下标;

首先,判断是不是[]操作符中没有下标,如果是就报错。因为没有下标的话,是要新增一个字数组,这对于字符串来说肯定要出错。

然后判断下标是不是数字型的,请注意 1234 和 "1234" ,PHP都会认为是数字型。如果不是数字类型的,就会将下标转换为数字型,这种转换规则下,字符串都会被转换为0;

所以,上面那个例子中,访问下标为 content 的数据时,就会返回下标为0的数据,也就是

所以,严谨地来说,访问一个数组下标的时候,要首先判断一下这个类型是不是数组类型,才能保证万无一失。

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

CakePHP Project Configuration CakePHP Project Configuration Sep 10, 2024 pm 05:25 PM

In this chapter, we will understand the Environment Variables, General Configuration, Database Configuration and Email Configuration in CakePHP.

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

CakePHP Date and Time CakePHP Date and Time Sep 10, 2024 pm 05:27 PM

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

CakePHP File upload CakePHP File upload Sep 10, 2024 pm 05:27 PM

To work on file upload we are going to use the form helper. Here, is an example for file upload.

CakePHP Routing CakePHP Routing Sep 10, 2024 pm 05:25 PM

In this chapter, we are going to learn the following topics related to routing ?

Discuss CakePHP Discuss CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

CakePHP Creating Validators CakePHP Creating Validators Sep 10, 2024 pm 05:26 PM

Validator can be created by adding the following two lines in the controller.

See all articles