标签: php-internals

zend_string_release和zend_string_free有什么区别?

我看到了源头,但仍无法完全解释差异:

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反之亦然,那将是很好的.

c php-internals

3
推荐指数
1
解决办法
329
查看次数

将php扩展编译为dll

我最近几天尝试使用运算符重载扩展(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文件.

php windows dll php-extension php-internals

2
推荐指数
1
解决办法
1252
查看次数

为什么PHP元素在引用元素时会被修改?

在引用数组的元素时,会修改数组的内容:

$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)

这看起来很奇怪.这种奇怪的解释是什么?

php arrays reference php-internals

2
推荐指数
1
解决办法
191
查看次数

当数组有超过2147483647个元素时,count的行为是什么?

在32位系统上,一个数组可以有多达4294967295个元素(根据Artefacto在另一个线程上的帖子).

但是,count将元素数作为int返回,而在32位系统上,int最多为2147483647.

count当数组有超过2147483647个元素时会返回什么?

php arrays php-internals

2
推荐指数
1
解决办法
145
查看次数

array_sum在PHP中使用什么算法?

数组和使用什么算法使它比一些循环更快?

是前缀sum/suffix sum还是其他什么?

php arrays algorithm php-internals

2
推荐指数
1
解决办法
542
查看次数

进程last-request-cpu的PHP-FPM池状态

我已经安装了 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 c php-extension php-internals

2
推荐指数
1
解决办法
2404
查看次数

如何使用新的Zend API升级PHP函数参数?

我正在开发一个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)?,如果是这样,这对性能有何影响?

php-extension php-internals php-7

2
推荐指数
1
解决办法
903
查看次数

PHP 7.1中的隐式void返回?

我在这里找到了新的规范: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 standards php-internals php-7.1

2
推荐指数
1
解决办法
379
查看次数

在转换为字符串时,(string)$ value和"$ value"之间的速度更快

在PHP中,假设$value = 12345;(整数),$value从整数转换为字符串时速度更快;

$value = (string)$value;
Run Code Online (Sandbox Code Playgroud)

要么

$value = "$value";
Run Code Online (Sandbox Code Playgroud)

这是一种绩效衡量问题,特别针对这种情况.谢谢你的帮助!

php casting php-internals php-7

2
推荐指数
1
解决办法
69
查看次数

PHP数组语法/运算符?

在PHP中编写关联数组的语法时,我们执行以下操作

$a = array('foo' => 'bar');
Run Code Online (Sandbox Code Playgroud)

我很好奇=>语法的关系,或者可能是运算符.这是否与ZE中哈希表中使用的某种引用有关,或者某种后续的右移或引用C?我想我只是想知道这个语法的真正根本目的,它是如何与用于处理数组的ZE和/或php扩展相关,它如何与C编译之前的书面函数相关,或者如果我只是不知道我是什么我在说:)

php c arrays syntax php-internals

1
推荐指数
1
解决办法
223
查看次数