我看到了源头,但仍无法完全解释差异:
static zend_always_inline void zend_string_free(zend_string *s)
{
if (!IS_INTERNED(s)) {
ZEND_ASSERT(GC_REFCOUNT(s) <= 1);
pefree(s, GC_FLAGS(s) & IS_STR_PERSISTENT);
}
}
static zend_always_inline void zend_string_release(zend_string *s)
{
if (!IS_INTERNED(s)) {
if (--GC_REFCOUNT(s) == 0) {
pefree(s, GC_FLAGS(s) & IS_STR_PERSISTENT);
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
如果有一个zend_string_free更合适的实例,zend_string_release反之亦然,那将是很好的.
我最近几天尝试使用运算符重载扩展(pecl.php.net/package/operator),最近显然已更新为与5.3和5.4兼容.
我已经尝试使用本指南在Windows(64位Windows 7)中编译它,PHP 5.4和Windows SDK 7.1没有运气.所以我尝试使用PHP 5.3和Windows SDK 6.1,我可以使用配置"configure --disable-all --enable-cli --enable-operator"然后"nmake"成功编译它.问题是它不会为操作员扩展生成一个dll文件,而是我得到的是这个,这对我来说显然是无用的.我想要的是我可以用于本地WampServer设置的DLL.
我在pecl.php.net网站上尝试使用operator-0.4.1时遇到了致命错误,所以我从git存储库(github.com/php/pecl-php-operator)下载并编译,这是什么生成.obj,.idb和.sbr文件.
在引用数组的元素时,会修改数组的内容:
$arr = array(100, 200);
var_dump($arr);
/* shows:
array(2) {
[0]=>
int(100) // ? ? ? int(100)
[1]=>
int(200)
}
*/
$r = &$arr[0];
var_dump($arr);
/* shows:
array(2) {
[0]=>
&int(100) // ? ? ? &int(100)
[1]=>
int(200)
}
*/
Run Code Online (Sandbox Code Playgroud)
Live run. (Zend Engine会很好,而HHVM显示"进程退出代码153".)
为什么要修改元素?
我们为什么要看&int(100)而不是int(100)?
这看起来很奇怪.这种奇怪的解释是什么?
数组和使用什么算法使它比一些循环更快?
是前缀sum/suffix sum还是其他什么?
我已经安装了 PHP 并启用了 FPM 功能,但我对 FPM 状态数据(例如进程 Last-request-cpu)感到不确定,下面是我的 php-fpm.conf 详细信息。
[www]
; Unix user/group of processes
user = www-data
group = www-data
; Chdir to this directory at the start.
chdir = /
; The address on which to accept FastCGI requests.
listen = /var/run/phpfpm/$pool_php5-fpm.sock
; Set listen(2) backlog. A value of '-1' means unlimited.
listen.backlog = -1
; Set permissions for unix socket.
listen.mode = 0666
; Pool configuration.
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers …Run Code Online (Sandbox Code Playgroud) 我正在开发一个php扩展,将其升级到PHP7,我的问题是关于INTERNAL_FUNCTION_PARAMETERS.在之前的版本中,它被定义为:
INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC
在新的zend引擎中,它被定义为:
INTERNAL_FUNCTION_PARAMETERS zend_execute_data *execute_data, zval *return_value
我有php函数,它返回一个数组,它看起来像这样:`
PHP_FUNCTION( myFunc ){ zval* myArray;
array_init(myArray);
/////
zval_ptr_dtor( &return_value );
*return_value_ptr = myArray;
}
Run Code Online (Sandbox Code Playgroud)
如果没有hanvig我应该如何获得类似的功能return_value_ptr?我应该使用#define RETURN_ARR(r)?,如果是这样,这对性能有何影响?
我在这里找到了新的规范:https://wiki.php.net/rfc/void_return_type
function lacks_return(): void {
// valid
}
function returns_nothing(): void {
return; // valid
}
function returns_void(): void {
return void; // valid
}
Run Code Online (Sandbox Code Playgroud)
问:你知道幕后发生了什么吗?lacks_return函数实际上会返回void吗?
在PHP中,假设$value = 12345;(整数),$value从整数转换为字符串时速度更快;
$value = (string)$value;
Run Code Online (Sandbox Code Playgroud)
要么
$value = "$value";
Run Code Online (Sandbox Code Playgroud)
这是一种绩效衡量问题,特别针对这种情况.谢谢你的帮助!
在PHP中编写关联数组的语法时,我们执行以下操作
$a = array('foo' => 'bar');
Run Code Online (Sandbox Code Playgroud)
我很好奇=>语法的关系,或者可能是运算符.这是否与ZE中哈希表中使用的某种引用有关,或者某种后续的右移或引用C?我想我只是想知道这个语法的真正根本目的,它是如何与用于处理数组的ZE和/或php扩展相关,它如何与C编译之前的书面函数相关,或者如果我只是不知道我是什么我在说:)