php 结构体_php基础知识集合

微信公众号:PHP在线

源码

PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法

编译器

编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序
一个现代编译器的主要工作流程:
源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序

非引用变量和引用变量

引用变量按址运算

function test(){
    $a="1";
    $b =&$a;
    $b="2";
    echo $a;
}
存储变量原理

首先,php的解析引擎是Zend引擎,。在zend引擎中是使用zval结构来存储php变量的,zend是用c写的,所以代码中的结构定义也是c的语言结构,zval中包含有四个属性,分别是value,type,refcount,is_ref。
value:知道一个union指针,用于存储变量的值,支持的类型有
1)long:整型,不区别长短,统一为long,取值范围是由编译器位数来决定),double,str
2)double:浮点数,也是不区分float或者double,只有一种
3)结构体str:php在存储字符串时,将字符串的内容和长度都存了起来,这是为了避免重复计算字符串的长度。php中的函数strlen,就是直接返回了这个长度。
4)hashTable:用于存放数组,课件php的数组效率是极快的,O(1),后面再介绍一下zend中hashtable的实现吧
5)obj:用于存放对象,我们看一下zend_object_value的定义,实际是一个handle(对象的唯一id)跟handles(存了对象里各种方法的指针的虚函数表)

type:type值是用来判断value中的值,对应的,如下表:

然后,你会发现php的资源居然是存的long类型,那是因为,这个long存的是一个指针,内部数组的index或者是其他结构的资源,可以将其视为handle。

refcount:引用计数,为了减少 内存池的开销和垃圾回收,加入了该字段,这样在下一次用到同一个值的时候就会直接引用该值,然后refcount++就好,当你unset掉某个变量是也是会相应refcount--,直到为0时则会回收把它干掉

is_ref:是否为引用,1为引用,0为否。php中可以分为两种变量,引用和非引用,非引用就是正常的赋值,但是引用的话是传递地址,需要在前面加上“&”,相当于指针,改变引用的值是会改变原来改地址的变量的值的。

Zend Engine

zend engine的出现使得php有了质的提高:
1、把边解释边运行的方式变为先进行预编译(compile),再执行(execute)的方式极大提高了php的运行效率。
2、使得执行效率大幅提高
3、由于实行功能分离,降低了模块间的耦合度,扩展性大大加强
Zend Engine 最主要的特性就是把 PHP 的边解释边执行的运行方式改为先进行预编译(Compile),然后再执行(Execute)。这两者的分开给 PHP 带来了革命性的变化:执行效率大幅提高;由于实行了功能分离,降低了模块间耦合度,可扩展性也大大增强。此时 PHP 已经能很方便的应付各种各样的 BT 需求了,而伴随 PHP 4.4.x ―可能是 PHP4 系列的最后一个分支―的发布,PHP 的大部分开发人员已经将注意力放在了 PHP5 或者 PHP6 上面,以后发布的基本上就是一些 Bug Fix Release。可以说第一代的 Zend Engine 是已经在站最后一班岗了

函数&方法

函数是面向过程编程的一个算法
方法是面向对象编程的一个业务逻辑
p.s. PHP不像Java那样纯粹的面向对象编程,他在支持面向对象的同时,保留了面向过程的编程方式,所以在PHP的项目里面,通常既有函数,又有类;

短连接 & 长连接

短连接:比如http;
长连接:比如websocket;

1ec12e839f5687cea4ec08292c4f6a28.png

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

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

相关文章

Kubernetes 凭什么成了云原生应用底座?

微软开源的 云原生应用开发的框架 Dapr 发布了1.0 版本《Dapr 正式发布 1.0》,云原生应用开发更加简单容易,Dapr 的容器编排环境也是用的Kubernetes。过去几年,以 Docker、Kubernetes 为代表的容器技术已发展为一项通用技术,BAT、…

【汇总推荐】深度学习、自然语言处理干货笔记汇总

今天这篇文章对十一月份推送的干货笔记,做一个总结,大家可以进行分类查找,希望对大家有所帮助。人工智能实战技巧与学习方法系列免费公开课【重磅福利】人工智能实战技能与学习方法系列公开课免费分享深度学习干货文章【直观理解】一文搞懂RN…

计算机网络四级考试

计算机网络四级考试         第一章网络系统结构与设计的基本原则7月15日  8月6日          第二章中小型网络系统总体规划与设计方法7月17日  8月8日          第三章IP地址规划和设计方法7月19日  8月10日          第四章路由…

mongodb时间范围查询少8个小时_为何要对开源mongodb数据库内核做二次开发

关于作者前滴滴出行技术专家,现任OPPO文档数据库mongodb负责人,负责oppo千万级峰值TPS/十万亿级数据量文档数据库mongodb内核研发及运维工作,一直专注于分布式缓存、高性能服务端、数据库、中间件等相关研发。后续持续分享《MongoDB内核源码设…

谷歌微软高通反对英伟达收购ARM 值得国人深思

日前,外媒报道全球一些顶尖科技公司正在向美国反垄断监管机构表达反对英伟达公司收购ARM,认为该交易将损害对其业务至关重要的行业领域的竞争。谷歌、微软和高通公司等公司都对这笔价值400亿美元的交易感到担忧,并要求反垄断官员进行干预。谷…

爬虫 404 try_和我一起学爬虫

前几天就想写一个爬虫系列的文章,因为比较忙所以没有写(还不是因为懒),趁着现在屋里比较的凉爽,心也比较的静,总结下目前遇到的一些爬虫知识,本系列将从简单的爬虫开始说起,以后会逐…

女神一秒变路人!腾讯研究AI卸妆效果算法出品“一键卸妆”功能

综合自:快科技、腾讯国际计算机视觉大会(ICCV)于 10 月 22 日到 29 日在意大利威尼斯举办,会上,腾讯优图团队带来了一个让所有女生恨得牙痒痒的功能——“一键卸妆”。所谓道高一尺魔高一丈,美图秀秀造福了…

perl对文件和目录进行操作

对文件和目录进行操作opendir 目录句柄,“目录”;for $a(readdir 目录句柄){printer $a}areaddir HOME;打印目录,没有排序。查找递归目录用File::Find删除文件:(只是删掉连接,数据应该还没有删掉。我是这样…

二进制序列化

在计算机世界,万物皆01二进制,包括各种各样的文件格式和网络协议,二进制格式最为常见!NewLife.Core 内置了完整的二进制序列化框架 Binary,经过十多年洗礼,发展到了第三代支持Handler处理器扩展。Binary的同…

python搭建项目结构_Django搭建项目实战与避坑细节详解

Django 开发项目是很快的,有多快?看完本篇文章,你就知道了。安装 Django前提条件:已安装 Python。Django 使用 pip 命令直接就可以安装:pip install django如果安装失败,很可能是因为网络连接超时了&#x…

matlab基于ssd的角点匹配_基于关键点的目标检测

0 1前言:基于锚点的目标检测方法在基于关键点(key points)的目标检测方法出现之前,主流目标检测方法一般先设置一些预先定义好的 锚点 (anchor boxes)。 作为预测物体框的参考,神经网络只需要预测实际的物体框相对于这些锚点的偏移。 这样模型…

python中summary_python summary_study.py

#!/usr/bin/env python#-*- coding:utf-8 -*-import os,sys,time,shutil,refrom _ast import Numfrom django.db.models.sql.datastructures import Join---------------------------此脚本用于之前学习内容的回顾装饰器还需要多看,目前还是不是很清楚类的继承prope…

NLog整合Exceptionless

前言在实际的.Net Core相关项目开发中,很多人都会把NLog作为日志框架的首选,主要是源于它的强大和它的扩展性。同时很多时候我们需要集中式的采集日志,这时候仅仅使用NLog是不够的,NLog主要是负责代码中日志的落地,也就…

40个只有程序员才看得懂的段子

1. 一程序员去面试,面试官问:“你毕业才两年,这三年工作经验是怎么来的?!”程序员答:“加班。”2. 某程序员对书法十分感兴趣,退休后决定在这方面有所建树。于是花重金购买了上等的文房四宝。一…

bra型手机链

左看看,右瞧瞧,真不敢相信这个居然是手机链?带上它出门,回头率一定很高哦!就是有点贵,70元!转载于:https://blog.51cto.com/laizhngn5376/180850

MySQL8的inodb参数设置_MySQL8.0自适应参数innodb_dedicated_server

MySQL8.0有了一个新参数又叫自适应参数 innodb_dedicated_server将innodb_dedicated_server开启的时候,它可以自动的调整下面这四个参数的值:innodb_buffer_pool_size 总内存大小innodb_log_file_size redo文件大小innodb_log_files_in_group redo文件数…

让 gRPC 提供 REST 服务

让 gRPC 提供 REST 服务IntrogRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电…

python提取cad坐标到excel_使用python来操作autocad,并且将坐标点转换成cad可见对象...

由于工作需要,在项目中遇到一个棘手的问题,如何将(mssql)数据库中的BLOB文件转成cad可见图形(可能每个项目需求不一样,解决方式不同)第一步 . 需要转换的图形类型第二步 . 那我们先查询这个字段第三步 试试将这个写入一个文本中 看看是那种图…

10张图看懂瞎忙和高效的区别

时间是最公平的,每个人一天都是24小时,一年都是365天。但是,不同的人的产出却是天差地别。人和人的差距为什么这么大?而且这种差距,并不是家庭背景、权利财富或天赋带来的,仅仅是我们对时间的掌控。正好看到…

pc模式 华为mate30_华为mate30与电脑连不上怎么回事

大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。系统版本为EMUI 10.1,华为mate30与电脑连不上的原因:1、可能是USB线连接不正常。建议更换数据线试试。2、确认电脑上的手机USB 驱动已经安装成功,…