我使用PHP 7.1.0.
假设我们有一个特征,我们在一个类中使用它并重命名导入的方法:
trait T
{
public function A() {
echo ".";
}
}
class C
{
use T {
A as B;
}
}
$c = new C();
$c->B();
$c->A(); // Why does it work?
Run Code Online (Sandbox Code Playgroud)
为什么PHP仍然允许我使用旧的方法名称(A在这种情况下)?
这真的很痛苦,因为在更复杂的示例中,您不能依赖于方法重命名 - 因此您可能会意外地收到"不兼容的声明"错误:
class BaseSrc
{
}
trait BaseTrait
{
public function init(BaseSrc $baseSrc)
{
echo "Init Base";
}
}
class Base
{
use BaseTrait {
BaseTrait::init as initBase;
}
}
$base = new Base();
$base->initBase(new BaseSrc());
$base->init(new BaseSrc()); // WHY …Run Code Online (Sandbox Code Playgroud) 我试图pcntl_fork()在php-fpm中使用,但它不可用,我得到:
Call to undefined function pcntl_fork()
Run Code Online (Sandbox Code Playgroud)
即使我已经在评论disable_functions中表达了评论php.ini.phpinfo()显示作者和php -m列表pcntl.如果我正在从cli执行我的脚本,它可以工作.我还需要启用其他选项吗?
作为MWE,我在https://github.com/white-gecko/pcntl-mwe resp上准备了一个最小的docker环境.
docker pull whitegecko/pcntl-mwe
Run Code Online (Sandbox Code Playgroud)
如果你用它运行它将docker run -it --rm --name pcntl -p 8080:80 pcntl有例子http://localhost:8080/和phpinfo at http://localhost:8080/phpinfo.php.它是一个debian jessie系统.
在多线程中,全局变量或资源在线程之间共享.我在c中使用pthread库
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
void *worker(void *);
int ctr = 0;
pthread_mutex_t lock;
int main(int argc, char *argv[])
{
pthread_t t[2];
int i = 0;
//~ pthread_mutex_init(&lock, NULL);
while(i < 2)
{
pthread_create(&t[i], NULL, &worker, NULL);
i++;
}
pthread_join(t[0], NULL);
pthread_join(t[1], NULL);
//~ pthread_mutex_destroy(&lock);
//~ pthread_join(t[1], NULL);
return 0;
}
void *worker(void *arg)
{
//~ pthread_mutex_lock(&lock);
//~ int ctr = 0;
ctr += 1;
printf("job %d started\n", ctr);
sleep(1);
//~ ctr += 1;
printf("job %d finished\n", ctr); …Run Code Online (Sandbox Code Playgroud) 我正在使用 Docker 并且安装了 xdebug。
如果我运行以下命令,我可以确定 xdebug 不会影响测试执行吗?
php -d xdebug.default_enable=0 -d pcov.enabled=1 path/to/phpunit --coverage-text
Run Code Online (Sandbox Code Playgroud)
我读到pcov 可能更快,但据我所知 xdebug 必须被禁用。
是否最好执行以下操作来实现最快的覆盖率而不是运行上述命令?
运行测试
php -d pcov.enabled=1 path/to/phpunit --coverage-text
Run Code Online (Sandbox Code Playgroud)恢复 xdebug 配置
我最近ctype_*在PHP中使用了一组函数,发现了奇怪的行为.例如,我有一些代码:
for ( $i = 0; $i < 1000000; $i++ ) {
if ( ctype_space( $i ) ) {
var_dump( $i );
}
}
Run Code Online (Sandbox Code Playgroud)
当$i具有值[9,10,11,12,13,32]然后[ctype_space][1]将返回真.我正在使用下一个PHP版本:
PHP 7.1.4-1+deb.sury.org~xenial+1 (cli) (built: Apr 11 2017 22:12:32) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.4-1+deb.sury.org~xenial+1, Copyright (c) 1999-2017, by Zend Technologies
with Xdebug v2.5.1, Copyright (c) 2002-2017, by Derick Rethans
Run Code Online (Sandbox Code Playgroud)
这是PHP的错误还是功能?也许我不知道什么?请帮我理解一下.