PHP 的常数还是很有趣的。作为一个脚本语言,常数在 PHP 中成为了一种十分灵活的东西。没有细究 PHP 的文档,自己做了个实验来看看 PHP 到底时怎么处理常数的。实验代码如下:
1 2 3 4 5 6 7 8 | function a($t) { define('T', $t); echo T; } a('a'); echo T; a('b'); |
结果发现,输出的三个字符都是 a,而且没有报错。这说明,无论常数在哪里声明,都是全局有效的,而且定义后不可再被更改了(废话……不然还叫常数)。从定义发生的时机看,确实是第一次调用函数 a() 的时候被定义的,而后再次调用函数 a() 时没有被修改也没有报错。还真是有趣的说~
话说今天发现 PHP 的 link 函数的文档中写着“5.3.0 This function is now available on Windows platforms.”!十分好奇,Windows 下也有文件硬链接?载来 PHP 5.3.0 RC2(又一惊,5.3.0 已经到 RC2 了!)的代码,细细观赏一番,发现在 ext/standard 下有一个文件叫 link_win32.c,打开看到如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | PHP_FUNCTION(link) { /* ... 此处省略数行 ... */ #ifndef ZTS ret = CreateHardLinkA(topath, frompath, NULL); #else ret = CreateHardLinkA(dest_p, source_p, NULL); #endif if (ret == -1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno)); RETURN_FALSE; } RETURN_TRUE; } |
CreateHardLinkA 难道是一个 API 函数?再一查,发现 MSDN 上有文档:CreateHardLink Function (Windows),上面还写着“Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only for files, not directories.”,只有 NTFS 才能用。看来只好认为是学 Linux 的了……竟然支持,真是不可思议,不过 Windows 为什么默认却没有办法在 GUI 中使用这个功能呢?
Comments