关于 PHP 常数的定义和范围

0

Comments

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 中使用这个功能呢?

Leave a Reply