php什么是变量6,PHP变量是什么

PHP是一门弱类型语言,本身不严格区分变量的类型。PHP在变量申明的时候不需要指定类型。

PHP在程序运行期间可能进行变量类型的隐示转换。 和其他强类型语言一样,程序中也可以进行显示的类型转换。

PHP变量可以分为简单类型(int、string、bool)、集合类型(array resource

object)和常量(const)。以上所有的变量在底层都是同一种结构 zval。

Zval主要由三部分组成:

type:指定了变量所述的类型(整数、字符串、数组等)

refcount&is_ref:用来实现引用计数(后面具体介绍)

value:核心部分,存储了变量的实际数据

Zvalue是用来保存一个变量的实际数据。因为要存储多种类型,所以zvalue是一个union,也由此实现了弱类型。

PHP变量是什么?

引用计数在内存回收、字符串操作等地方使用非常广泛。PHP中的变量就是引用计数的典型应用。Zval的引用计数通过成员变量is_ref和ref_count实现,通过引用计数,多个变量可以共享同一份数据。避免频繁拷贝带来的大量消耗。在进行赋值操作时,zend将变量指向相同的zval同时ref_count++,在unset操作时,对应的ref_count-1。只有ref_count减为0时才会真正执行销毁操作。如果是引用赋值,则zend会修改is_ref为1。

PHP变量通过引用计数实现变量共享数据,那如果改变其中一个变量值呢?当试图写入一个变量时,Zend若发现该变量指向的zval被多个变量共

享,则为其复制一份ref_count为1的zval,并递减原zval的refcount,这个过程称为“zval分离”。可见,只有在有写操作发生时

zend才进行拷贝操作,因此也叫copy-on-write(写时拷贝)对于引用型变量,其要求和非引用型相反,引用赋值的变量间必须是捆绑的,修改一个变量就修改了所有捆绑变量。整数、浮点数是PHP中的基础类型之一,也是一个简单型变量。对于整数和浮点数,在zvalue中直接存储对应的值。其类型分别是long和double。

从zvalue结构中可以看出,对于整数类型,和c等强类型语言不同,PHP是不区分int、unsigned int、long、long

long等类型的,对它来说,整数只有一种类型也就是long。由此,可以看出,在PHP里面,整数的取值范围是由编译器位数来决定而不是固定不变的。

对于浮点数,类似整数,它也不区分float和double而是统一只有double一种类型。在PHP中,如果整数范围越界了怎么办?这种情况下会自动转换为double类型,这个一定要小心,很多trick都是由此产生。

和整数一样,字符变量也是PHP中的基础类型和简单型变量。通过zvalue结构可以看出,在PHP中,字符串是由由指向实际数据的指针和长度结

构体组成,这点和c++中的string比较类似。由于通过一个实际变量表示长度,和c不同,它的字符串可以是2进制数据(包含\0),同时在PHP中,

求字符串长度strlen是O(1)操作。在新增、修改、追加字符串操作时,PHP都会重新分配内存生成新的字符串。后,出于安全考虑,PHP在生成一个字符串时末尾仍然会添加\0

常见的字符串拼接方式及速度比较:假设有如下4个变量:$strA=‘123’; $strB = ‘456’; $intA=123;

intB=456;

PHP的数组通过Zend

HashTable来天然实现。foreach操作如何实现?对一个数组的foreach就是通过遍历hashtable中的双向链表完成。对于索引数组,通过foreach遍

历效率比for高很多,省去了key->value的查找。count操作直接调用

HashTable->NumOfElements,O(1)操作。对于’123’这样的字符串,zend会转换为其整数形

式。$arr[‘123’]和$arr[123]是等价的

资源类型变量是PHP中复杂的一种变量,也是一种复合型结构。PHP的zval可以表示广泛的数据类型,但是对于自定义的数据类型却很难充分描述。由于没有有效的方式描绘这些复合结构,因此也没有办法对它们使用传统的操作符。要解决这个问题,只需要通过一个本质上任意的标识符(label)引用指针,这种方式被称为资源。

PHP变量是什么?

像我们所熟悉的mysqli、fsock、memcached这一类都是资源,首先我们先了解关于这类资源的专业知识,其次将讲解如何使用这些资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美国只有两样东西要比中国 贵,一个是智慧财产权,一个是人工

美国只有两样东西比中国贵 最近中国一直在热传美国的物价低于中国,特别是生活必需品方面,甚至换算成同一种货币都低于中国。从整体情况来 看,美国人各项消费的支出所占收入的比例要远远低于中国人。有人提出来疑问说,那美国人收入…

红黑树和平衡二叉树的区别_面试题精选红黑树(c/c++版本)

红黑树的使用场景非常广泛,比如nginx中用来管理timer、epoll中用红黑树管理事件块(文件描述符)、Linux进程调度Completely Fair Scheduler用红黑树管理进程控制块、CSTL中map,set的底层实现全是用的红黑树。掌握红黑树的原理以及使用场景&…

linux 更新软件命令 失败,对linux下软件(库)的更新命令详解

在ubuntu服务器下安装包的时候,经常会用到sudo apt-get install 包名 或 sudo pip install 包名,那么两者有什么区别呢?1.区别pip用来安装来自PyPI(https://www.python.org/)的python所有的依赖包,并且可以选择安装任何在PyPI上已…

查看oracle死锁进程并结束死锁

查看oracle死锁进程并结束死锁 摘自: http://sqcjy111.iteye.com/blog/1183928 查看锁表进程SQL语句1: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$sessio…

python科学坐标图绘制的四个要素_Python3.0科学计算学习之绘图(四)

绘制三维图:mplot3d工具包提供了点、线、等值线、曲面和所有其他基本组件以及三维旋转缩放的三维绘图。1.散点的三维数据图from mpl_toolkits.mplot3d import axes3d #需要从mplot3d模块中导入axes 3D类型import numpy as npimport matplotlib.p…

linux shell tr命令,linux shell tr命令详解

tr命令是linux下的一个命令,那么它的语法和用途是什么呢?下面由学习啦小编为大家整理了linux shell tr命令的相关知识,希望大家喜欢!linux shell tr命令tr是translate的简写,亦即翻译,但是遗憾的是,它不能翻译句子&am…

PHP 函数:intval()

intval 变量转成整数类型。 语法: int intval(mixed var, int [base]); 返回值: 整数 函数种类: PHP 系统功能 内容说明:本函数可将变量转成整数类型。可省略的参数 base 是转换的基底,默认值为 10。转换的变量 var 可以为数组或类之外的任何类型变量。转载于:htt…

python桌面应用html_是否将Python后端与HTML / CSS / JS用户界面集成到桌面应用程序? - javascript...

在创建桌面应用程序时,如何或将Python代码与HTML / CSS / JS集成为用户界面,该如何做?一个简单的例子;如果我想用Python创建一个打印“ Hello World!”的函数并使用HTML / CSS / JS创建用户界面(使其精美,也…

linux中按行读取文件,Linux按行读取文件内容

方法1&#xff1a;while循环中执行效率最高&#xff0c;最常用的方法。function while_read_LINE_bottm(){While read LINEdoecho $LINEdone < $FILENAME}#!/bin/bashwhile read linedoecho $linedone < filename(待读取的文件)注释&#xff1a;习惯把这种方式叫做read釜…

Visual C++ 基础数据类型的转换

16.1如何将基本数据类型转换成CString类型 用CString的Format方法 void CDemoView::OnDraw(CDC* pDC) {int a 100;double b 1.23;//将整型转换成CStringCString str1 _T("");str1.Format(_T("%d"), a);//将实型转换成CStringCString str2 _T("&qu…

python 片段_python片段程序

from PIL import Imageimport re#给图片添加一层蒙版&#xff0c;可以设置位置&#xff0c;尺寸&#xff0c;颜色&#xff0c;透明度def img_add_glass(img,new_imgglass,glass_factor0.3,glass_color#ffffff,glass_x0,glass_y0,glass_width300,glass_height100):imageobjectif…

linux ruby 安装路径,Linux(CentOS 7)安装ruby

首先下载Linux版ruby源码“ruby-2.7.0.tar.gz”&#xff0c;上传并解压到/usr/local路径下&#xff1a;tar -xzvf ruby-2.7.0.tar.gz安装编译依赖工具&#xff0c;gcc、gcc-c、gdbm-devel、readline-devel和openssl-devel&#xff1a;yum install gccyum install gcc-cyum inst…

开心一笑

1转载于:https://www.cnblogs.com/luquanmingren/p/4261912.html

酱油和gbt酱油哪个好_酱油越贵越好?认准瓶身这4处,轻松挑到好酱油!

买酱油这件事&#xff0c;爷叔阿姨们都不陌生。现在市面上酱油品种很多&#xff0c;除了普通的生抽、老抽以外&#xff0c;还有些别的口味&#xff0c;比如海鲜酱油、菌菇酱油等等&#xff0c;价格比普通的还高出不少&#xff0c;这些酱油真的更鲜更好吗&#xff1f;买酱油的2大…

linux网站465端口是什么端口,发送端口25,465,587端口疑问解答

25端口(SMTP)&#xff1a;25端口为SMTP(Simple Mail Transfer Protocol&#xff0c;简单邮件传输协议)服务所开放的&#xff0c;是用于发送邮件。如今绝大多数邮件服务器都使用该协议。当你给别人发送邮件时&#xff0c;你的机器的某个动态端口(大于1024)就会与邮件服务器的25号…

分析DuxCms之AdminController

1 2 /**3 * 后台模板显示 调用内置的模板引擎显示方法&#xff0c;4 * access protected5 * param string $templateFile 指定要调用的模板文件6 * return void7 */8 protected function adminDisplay($templateFile) {9 //获取菜单 10 …

在python语言中不能作为变量名的是什么_4、 在 Python 中可以使用 if 作为变量名。 (1.0分)_学小易找答案...

【判断题】2、 Python 变量使用前必须先声明 , 并且一旦声明就不能在当前作用域内改变其类型。 (1.0分)【填空题】Python语句.join(list(hello world!))执行的结果是____________________。 (1.0分)【填空题】Python语句list(range(1,10,3))执行结果为___________________。 (1…

hdu 3572 Task Schedule 网络流

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid3572Our geometry princess XMM has stoped her study in computational geometry to concentrate on her newly opened factory. Her factory has introduced M new machines in order to process the coming …

linux格式化ext4分区工具,linux学习笔记-磁盘分区、格式化与挂载

磁盘分区、格式化与挂载磁盘分区、格式化与挂载一、给磁盘分区分区工具介绍fdisk:分区时只修改分区表信息&#xff1b;操作简单&#xff1b;不支持大于2T的分区&#xff1b;只能使用交互式来分区。parted:直接将分区信息写入磁盘&#xff1b;操作比较复杂&#xff1b;支持大于2…

uml 时序图_程序猿都应学习的语言:看 25 张图学 UML

作者 | 逸珺责编 | 屠敏来源 | 嵌入式客栈作为程序猿都最好掌握的一门语言&#xff0c;那就是UML(Unified Modeling Language)&#xff0c;统一建模语言(UML)是软件工程领域中一种通用的开发建模语言&#xff0c;旨在提供一种可视化系统设计的标准方法。是开发人员、系统设计人…