IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 【php】基础知识 -> 正文阅读

[PHP知识库]【php】基础知识

1.php的垃圾回收机制

在创建一个php变量并赋值时,就会生成一个zval变量容器,例如$a?=?"abc";就生成了一个类型为string、值为abc的变量容器,并定义其被引用为is_ref=false,变量被使用次数refcount=1,把这个变量值赋给其他变量,它的引用次数就会增加,当它的某个引用生命周期结束,或者被unset()了,引用次数就-1,变量容器在?refcount = 0?时就被销毁。

$a = 'abc';
xdebug_debug_zval('a');//(interned, is_ref=0)string 'abc' (length=3)
$c = &$a;
$c = 'a';
xdebug_debug_zval('a');//(refcount=2, is_ref=1)string 'a' (length=1)
$b = $a;
xdebug_debug_zval('a');//(refcount=2, is_ref=1)string 'a' (length=1)
unset($c);
xdebug_debug_zval('a');//(refcount=1, is_ref=1)string 'a' (length=1)
echo $a;//a

只有&引用才会使refcount、is_ref改变的,普通的赋值不会改变$a的refcount、is_ref,&引用是把$a的内存地址复制给了$c,$c='a'后,$a也是='a'的。

为了解决循环引用内存泄露问题 , 使用同步周期回收算法,比如当数组或对象循环的引用自身 , unset掉数组的时候 , 当refcount-1后还大于0的 , 就会被当成疑似垃圾 , 会进行遍历 ,并且模拟的删除一次refcount-1如果是0就删除 ,如果不是0就恢复

2.PHP中定义常量的几种方式与区别?

使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。

(1).const用于类成员变量的定义,一经定义,不可修改。define不可用于类成员变量的定义,可用于全局常量。

(2).const可在类中使用,define不能

(3).const不能在条件语句中定义常量。

(4).const采用一个普通的常量名称,define可以采用表达式作为名称。?

(5).const只能接受静态的标量,而define可以采用任何表达式。

(6).const定义的常量时大小写敏感的,而define可通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。

3.php与nginx通信方式有哪些

IP+端口号(tcp socket):支持跨机器访问

unix socketSocket 在 Linux 中以文件形式存在,由于不需要建立额外的网络请求,所以效率更高,但是由于是本地文件,所以不能跨机器访问。

4.函数和语句的区别

函数要被zend引擎解析为语言结构,因为多了一步所以往往没有语句快。

5.include和require的区别是什么?

require在编译时引用,当引用出错,会提示错误并且会终止程序执行
include在运行时引用,当引用出错,会提示一个错误并会继续执行下去

6.composer

composer install - 如有 composer.lock 文件,直接安装,否则从 composer.json 安装最新扩展包和依赖;
composer update - 从 composer.json 安装最新扩展包和依赖;
composer update vendor/package - 从 composer.json 或者对应包的配置,并更新到最新;
composer require new/package - 添加安装 new/package, 可以指定版本,如:composer require new/package ~2.5.

composer.json与composer.lock区别

当执行composer时,如果有composer.lock 文件,需要安装.lock中指定的版本,阻止自动获取最新版本的依赖项(这样可以保证在各个时期获取的依赖版本一致,避免更新后以前代码不可用或冲突),如果没有就从composer.json 安装最新扩展包和依赖,lock强调了对版本的锁定

二者都是json格式,composer.json指定了当前包的名称、描述、依赖、自动加载等信息,composer.json主要指定了要使用的包的版本等信息。

composer安装的文件夹路径:根目录的vender下

composer安装后的依赖如何调用:项目中include "vendor/autoload.php"

7.php的生命周期

模块初始化阶段(Module init):即调用每个拓展源码中的的PHP_MINIT_FUNCTION中的方法初始化模块,进行一些模块所需变量的申请,内存分配等。

请求初始化阶段(Request init):即接受到客户端的请求后调用每个拓展的PHP_RINIT_FUNCTION中的方法,初始化PHP脚本的执行环境。

执行该PHP脚本。

请求结束(Request Shutdown):这时候调用每个拓展的PHP_RSHUTDOWN_FUNCTION方法清理请求现场,并且ZE开始回收变量和内存

关闭模块(Module shutdown):Web服务器退出或者命令行脚本执行完毕退出会调用拓展源码中的PHP_MSHUTDOWN_FUNCTION 方法

8.for foreach区别

都用来遍历,for自定义指针可以遍历任何数据,foreach只能遍历数组或者对象,是按照其内部的指针去循环的。

9.http常用错误码及其含义

301 永久重定向

302 暂时重定向

401身份认证失败

403资源不可用,通常因为服务端文件权限问题

500 服务端故障,通常是执行代码故障,应检查php代码、php、nginx错误日志,也有可能是文件资源描述符限制进程不能打开过多文件,需要修改限制

502 504 服务端故障,通常是nginx故障,无法处理过多的用户请求,php-fpm不足等,需要查看php、nginx错误日志,适当增大并发支持或限流,也需要考虑是否被攻击服务器。

参考:

https://www.runoob.com/http/http-status-codes.html

https://cloud.tencent.com/developer/article/1377959

10.$a = 0123,echo $a;

输出83? 因为开头的0代表八进制。与之相似,0x123 开头的0x代表16进制,输出291。

但是intval('0123')=123

intval('0x123')=0

是的,不是纯数字的字符串就是转为0,它不把0 0x做为进制标示来识别

11 define? const

define('A',123);
define('A',1234);
echo A; //123?

const A = 'dog';
const A = 'cat';
echo A;//dog

define、const都是定义常量,常量是不能被更改的,在第二次定义时还会报错Warning,但是不影响运行。

常量不用加$符号

在php中定义常量时,const和define的区别?

答:使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。

1、const用于类成员变量的定义,一经定义,不可修改。Define不可以用于类成员变量的定义,可用于全局常量。

2、Const可在类中使用,define不能

3、Const不能在条件语句中定义常量

12.PHP的基本变量类型

四种标量类型:boolean (布尔型)、integer (整型)、float (浮点型, 也称作 double)、string (字符串)

两种复合类型:array (数组)、object (对象)

最后是两种特殊类型:resource(资源)、NULL(NULL)

13.秒杀简单流程

preview

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 11:59:32  更:2021-08-25 12:00:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:57:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码