Php

Thu, Jan 19, 2017
这两天看一本PHP的进阶书,发现了一些之前没有注意的特性。比如PHP接口的设计方式和它对实现该接口的类的约束就和通常的语言(比如Java)不

Wed, Jan 18, 2017
这里记录一下如何在PHP5的扩展中创建变量,包括局部变量和全局变量。 必备知识 PHP内部有符号表的概念,其中局部变量存放在指针active_s


Sat, Apr 9, 2016
前面啰嗦了这么多读者都要没有兴趣了。从现在起要真正开始PHP扩展开发阶段了。 首先来生成扩展的骨架。所谓骨架就是一个扩展需要的基本文件了。 获取

Sat, Apr 9, 2016
在编写之前先用PHP实现这个类的原型吧。 <?php namespace Hylog; use \DateTime; class Hylog { const HYLOG_VERSION = "0.1.0"; const EMERGENCY = 'EMERGENCY'; const ALERT = 'ALERT'; const CRITICAL = 'CRITICAL'; const ERROR = 'ERROR'; const WARNING = 'WARNING'; const NOTICE = 'NOTICE'; const INFO = 'INFO'; const DEBUG = 'DEBUG'; private static $_instance; private $_basePath; private

Sat, Apr 9, 2016
好了,现在来整理一下我们要做的工作。 功能目标 既然是要做一个记日志的扩展,那当然就避免不了两个功能: 格式化日志流 将日志流推送到特定目标(通常是

Mon, Apr 4, 2016
这段时间其实在看C语言,但看来看去也不知道学了这些知识用在哪里。作为一名PHP程序员,想要进阶,当然得懂PHP的运行原理。那么,编写扩展就成

Fri, Apr 1, 2016
今天花了点时间测试了开源项目seaslog和PHP内置的error_log的性能。本文不涉及该扩展的安装和使用,如果对其不了解,可移步官网。 项目的描述有语法问题”A effective …“,我提醒了原作者,然而并没有被理会。。。 测试环境 项目 属性 CPU Intel® Xeon® CPU E5520 @ 2.27GHz 8核 内存 48G PHP 7.0.1 Nginx 1.2.7 测试代码 <?php error_log("I am testing performance of error_log" . PHP_EOL, 3, __DIR__ . '/error_log.log'); SeasLog::debug("I am testing performance of seaslog"); 结果数据 每种方式测试5次,请求次数1000次,并发量分别是1, 10, 100, 1000。分别记录每次测试的QPS。 1. error_log 并发量 1 2 3 4 5 1 2430 2579 2685 2484 2622 10 7303 7844 5892 11739 9002 100 11763 6107 6921 9258 11999 1000 324 891 324 889 883 2.

Sat, Jan 9, 2016
作为一个PHP程序员,这个问题本来不应该是我考虑的。 我需要知道仅仅是如果我的程序需要接受一个integer作为输入,拿到输入后最好能intval($var)一下,保证输入的是integer。而让我感到不理解的是,为什么PHP的强制类型转换会做成(int)$var这种方式,按照正常人的理解,不管int/string是关键字还是函数,要么作为int $var,这样具有迷惑性,因为在别的语言里这都是用来声明变量的,要么int($var),这都很容易理解,然而。。。 好了,想到这个问题是因为这两天算是深入的用了Python的一些功能,当然主要还是用来处理日志,当我发现当我将两个从dict中取出的值相加,然后和一个数字的值对比时,并没有出现我要的结果。于是就查了下Python的类型。原来Python是动态类型,同时是强类型。 我看到网上很多人对这个问题还挺迷惑。刚看了PHP对于类型的解释,其实很能说明问题。 PHP 在变量定义中不需要(或不支持)明确的类型定义;变量类型是根据使用该变量的上下文所决定的。也就是说,如果把一个 string 值赋给变量 $var,$var 就成了一个 string。如果又把一个integer 赋给 $var,那它就成了一个integer。 这,就是标准的动态类型了。相应的,var a = 20 :Int,声明了变量a=20,同时指定该变量的类型是Int,如果var a = '20': Int在编译时就会报错,没错这就是静态类型(这是Swift的语法)。有人可能就会拿这个举例说C也是静态类型——的确,我也会认为它是静态类型,因为它也需要指定类型才可以定义——然而,判断是否是静态类型的根据并不在此,而是像知乎@姚培森的答案中说的,是根据它是否所有程序都是well behaved。这个就太深了,我就不深究了,毕竟对C的研究也不深,说错了还不如不说。 那再来看看让我误解的Python,无疑,Python和PHP一样在定义变量时也是不需要指定的,但对PHP来说, $a = 1; $b = '2'; echo $a + $b; 这样的代码完全没有问题。但到了Python这里 a = 1 b = '2' print(a + b) # 没错,我选择Python3 结果呢: Trt recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str' 这就是强类型和弱类型的区别了。强类型不允许出现forbidden behaviors。