Laravel 开发工具系列 —— 使用 Visual Studio Code 进行 Laravel 开发

关于 Laravel 代码开发工具大家各有所好,大部分应该在用 PHPStorm,Sublime 也有很多粉丝,还有人喜欢 Atom,不过今天要给大家推荐的是微软旗下新推出的编辑器 —— Visual Studio Code,注意这货不是 Visual Studio 那个庞然大物,一字之差,如隔三秋,它只有 46M 的体量,配合丰富的插件库,可以快速搭建适用于各种编程语言的开发利器,比如…

[ Laravel 5.5 文档 ] 处理用户请求 —— Laravel 视图渲染:Blade 模板引擎

Blade 简介 Blade 是由 Laravel 提供的非常简单但功能强大的模板引擎,不同于其他流行的 PHP 模板引擎,Blade 在视图中并不约束你使用 PHP 原生代码。所有的 Blade 视图最终都会被编译成原生 PHP 代码并缓存起来直到被修改,这意味着对应用的性能而言 Blade 基本上是零开销。Blade 视图文件使用 .blade.php 文件扩展并存放在 resour…

[ PHP 内核与扩展开发系列] 流式访问:访问流与静态资源操作

在你打开一个流之后,就可以在它上面执行 I/O 操作了,使用哪种协议包装 API 创建了流并不重要,它们都使用相同的访问 API。 读 流的读写可以使用下面的 API 函数组合完成,它们多数都是遵循 POSIX I/O 中对应的 API 规范的: int php_stream_getc(php_stream *stream); 从数据流中接收一个字符,如果流上没有数据,则返回 EOF。 …

[ PHP 内核与扩展开发系列] 流式访问:流的概览

通常直接文件描述符相比调用流包装层消耗更少的 CPU 和内存; 不过, 这样会将实现某个特定协议的所有工作都堆积到作为扩展开发者的身上,通过挂钩到流包装层,你的扩展代码可以透明的使用各种内建的流包装,比如HTTP、FTP,以及它们对应的 SSL 版本,另外还有 gzip 和 bzip2 压缩包装。通过 include 特定的 PEAR 或 PECL 模块,你的代码还可以访问其他协议, 比…

[ PHP 内核与扩展开发系列] INI 配置文件:声明和访问 php.ini 设置

在前面的章节中,我们已经学会了 MINIT、MSHUTDOWN,以及 RINIT 和 RSHUTDOWN 等函数的使用,这里我们将介绍并学习 php.ini 设置的使用。 INI 条目被定义在一个完整的独立块,位于 MINIT 方法所在的同一个源文件,并且用下面的一对宏来定义,并在这对宏之间放入一个或者多个条目:PHP_INI_BEGIN() 和 PHP_INI_END()。 这些宏方法…

[ PHP 内核与扩展开发系列] PHP 启动与终止那点事:全局变量的定义和使用

这一章节,我们将学习如何在 PHP 扩展中使用全局变量。 在扩展中定义全局变量 首先,我们需要在扩展的头文件中(默认是 php_*.h)中定义所有的全局变量。举个例子,比如我们要定义一个 unsigned long 类型的全局变量,可以这么做: ZEND_BEGIN_MODULE_GLOBALS(sample4) unsigned long counter; ZEND_END_MODUL…

[ PHP 内核与扩展开发系列] PHP 启动与终止那点事:常量的底层实现

在脚本中使用扩展的一个方便之处是,人们可以改变自己定义的常量,你可以通过 define() 函数来定义一个常量。在内核中,我们将会使用 REGISTER_*_CONSTANT() 的家族函数来注册常量。 对于自定义的大多数常量来说,你可能希望在程序初始化的时候便定义这些常量: PHP_MINIT_FUNCTION(sample4) { REGISTER_STRING_CONSTANT(“…

[ PHP 内核与扩展开发系列] PHP 启动与终止那点事:MINFO 与 phpinfo() 函数

如果你并不打算做出一个只有你自己使用的扩展,那么你可能需要告诉用户一些关于你的扩展的信息。比如:其环境和特定版本的可用功能、版本信息、作者信息,以便在发生问题的时候可以寻求帮助,甚至可以加上一个 LOGO 等等。 如果你仔细看过 phpinfo() 或者 php -i 的输出,相信你已经注意到,所有这些信息会组合成一个格式良好的、易于解析输出的数据块。你的扩展可以轻松地通过模块信息函数 …

[ PHP 内核与扩展开发系列] PHP 启动与终止那点事:一次请求的生命周期

在前面的章节里,你已经学会了如何使用 MINIT 函数在 PHP 加载模块的共享库时来执行初始化任务。在第一章,你还了解到扩展里其他三个函数:和 MINIT 函数对应的 MSHUTDOWN 函数,以及在每个页面请求开始和结束时候调用的方法 —— RINIT 函数和 RSHUTDOWN 函数。 除了上面说到的四个函数,还有两个函数只用于处理单个线程的启动和关闭,它们只作用于线程环境。 回顾…