PHP的变量结构

6 篇文章 0 订阅

PHP在内核中是通过zval这个结构体存储变量的:

struct _aval_struct {
    zvalue_value value;      // 变量的值
    zend_unit refcount__gc;  // 引用计数
    zend_uchar type;         // 变量当前的数据类型
    zend_uchar is_ref__gc;   // 是否引用状态
};
typedef struct _zval_struct zval;

// 在Zend/zend_types.h里定义的:
typedef unsigned int zend_uint;
typedef unsigned char zend_uchar;

// zvalue_value的定义:
type union _zvalue_value {
    long lval;
    double dval;
    struct {
        char *val;
        int len;   // 字符长度
    } str;
    HashTable *ht;
    zend_object_value obj;
} zvalue_value;

其中zvalue_value中ht是HashTable类型, HashTable在PHP中至关重要,它既具有双向链表的优点,同时具有能与数组匹敌的操作性能,这个数据结构几乎是PHP内核实现的基础.
所有的用户端定义的变量保存在一个符号表里,而这个符号表其实就是一个HashTable,它的每一个元素都是一个zval*类型的变量. 不仅如此,保存用户定义的函数,类,资源等的容器都是以HashTable的形式在内核中实现的.

两篇很不错的文章:

哈希表:

http://www.php-internals.com/book/?p=chapt03/03-01-01-hashtable

PHP的哈希表实现:

http://www.php-internals.com/book/?p=chapt03/03-01-02-hashtable-in-php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Laravel 的目录结构如下: ``` laravel/ ├── app/ # 应用程序代码 │ ├── Console/ # Artisan 命令 │ ├── Exceptions/ # 应用程序异常处理器 │ ├── Http/ # HTTP 请求处理器 │ ├── Jobs/ # 队列任务 │ ├── Listeners/ # 事件监听器 │ ├── Policies/ # 授权策略 │ ├── Providers/ # 服务提供商 │ ├── Rules/ # 请求验证规则 │ ├── Services/ # 业务逻辑 │ ├── User.php # 用户模型 │ └── ... # 其它文件 ├── artisan # Artisan 命令行工具 ├── bootstrap/ # 应用程序启动脚本 ├── config/ # 配置文件 ├── database/ # 数据库相关文件 │ ├── factories/ # 数据工厂 │ ├── migrations/ # 数据库迁移 │ ├── seeds/ # 数据填充 │ └── ... ├── public/ # 公共文件,如 CSS、JS 和图片 │ ├── css/ │ ├── js/ │ ├── favicon.ico │ └── index.php # 入口文件 ├── resources/ # 视图、语言文件和原生资源文件 │ ├── lang/ # 多语言文件 │ ├── views/ # 视图文件 │ └── ... ├── routes/ # 路由文件 ├── storage/ # 存储文件 │ ├── app/ # 应用程序文件 │ ├── framework/ # 框架文件 │ ├── logs/ # 日志文件 │ └── ... ├── tests/ # 单元测试 ├── vendor/ # 第三方 Composer 包 ├── .env # 环境 ### 回答2: Laravel 是一种流行的 PHP 框架,其目录结构设计非常合理和组织严密,易于维护和理解。下面是 Laravel 的目录结构的简要介绍: 1. app 目录:这是 Laravel 应用程序的核心目录,包含了应用程序的模型(Models)、视图(Views)和控制器(Controllers)。这里还包含了异常处理、中间件、事件、日志等功能的代码。 2. bootstrap 目录:该目录包含了 Laravel 框架的启动和引导代码,其中包含了自动载入机制和环境配置。 3. config 目录:该目录包含了应用程序的配置文件,可以在这里设置数据库连接、应用程序的环境变量和其他配置选项。 4. database 目录:该目录包含了数据库迁移文件和数据填充文件,可以通过迁移文件来创建和修改数据库表结构,并使用填充文件填充一些初始数据。 5. public 目录:该目录是应用程序的根目录,其中包含了前端资源文件(如 JavaScript、CSS 和图片等),以及一个入口文件 index.php。 6. resources 目录:该目录包含了应用程序的资源文件,包括视图模板文件、原始的 Sass、Less、JavaScript 源码文件等。 7. routes 目录:该目录包含了应用程序的路由文件,可以定义应用程序的路由规则。 8. storage 目录:该目录用于存储一些生成的文件,如日志文件、缓存文件、会话文件等。 9. tests 目录:该目录用于存放应用程序的测试案例。 10. vendor 目录:该目录包含了 Composer 打包工具下载和管理的第三方依赖库。 这些目录组织良好,分别用于存放不同的文件和代码,使得 Laravel 的项目结构非常清晰和灵活,有助于提高开发效率和代码的可维护性。 ### 回答3: Laravel是一个流行的PHP框架,其目录结构非常清晰和有组织性,方便开发人员管理和维护项目。以下是Laravel的目录结构解释: 1. app目录:这个目录是存放应用程序的核心代码的地方。包括控制器、模型以及其他自定义类。这是你写业务逻辑的地方。 2. bootstrap目录:这个目录包含了自动加载和启动应用程序所需的一些文件。例如,启动框架、配置加载和异常处理。 3. config目录:这个目录包含了应用程序的所有配置文件。你可以在这里设置数据库连接、邮件配置、缓存驱动等等。 4. database目录:这个目录包含了数据库迁移文件和数据填充器。你可以在这里管理和更新数据库的结构,以及初始化一些测试数据。 5. public目录:这个目录是应用程序的入口点,也是Web服务器公开访问的唯一目录。你可以在这里放置静态资源,例如CSS、JavaScript和图像文件。 6. resources目录:这个目录包含了应用程序所需的视图文件、语言文件和其他资源文件。你可以在这里定义布局、页面模板和语言翻译。 7. routes目录:这个目录包含了应用程序的所有路由文件。你可以在这里定义URL和对应的控制器方法,处理用户的请求。 8. storage目录:这个目录包含了应用程序的日志文件、缓存文件和上传的文件。你可以在这里存储应用程序运行过程中的各种数据。 9. tests目录:这个目录包含了应用程序的单元测试和功能测试。你可以在这里编写和运行测试,以确保应用程序的正确性。 总的来说,Laravel的目录结构非常有组织性,使开发人员可以快速找到所需的文件,并进行相关的修改和维护。这种结构也方便团队合作和项目的可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值