标签: php-7

PHP7 + Symfony 2.8,无法写入会话数据

我自己编译php7(974f6c2a705).如果我使用symfony运行php7 + php-fpm + nginx我收到此错误:

(使用snc redis包进行会话:)

 Warning: session_write_close(): Failed to write session data (user). Please verify that the current setting of session.save_path is correct (/tmp)
Run Code Online (Sandbox Code Playgroud)

(使用本机会话支持:)

 Warning: session_write_close(): Failed to write session data (user). Please verify that the current setting of session.save_path is correct (/[...]/app/cache/dev/sessions)
Run Code Online (Sandbox Code Playgroud)

问题似乎与symfony有关,因为php具有对文件夹的读/写访问权限.

如果我只运行此代码,它的工作原理如下:

session_start();
$_SESSION['x'] = 4234;
session_write_close();
Run Code Online (Sandbox Code Playgroud)

任何有关symfony未能编写会话的建议或想法?

php symfony php-7

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

在PHP 7中进行多线程处理

我已经读过PHP 7的预期功能之一是本机多线程(http://www.phpzag.com/php-7-expected-features-for-php-7/),但现在它未列在功能列表中http://php.net/manual/en/migration70.new-features.php你知道它是否已经实现了吗?我没有找到任何官方声明.

multithreading php-7

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

PHP 5到7迁移 - 数字比较

我注意到下面的代码导致PHP 5.x和7中的不同消息:

if ('0xFF' == 255) {
    echo 'Equal';
} else {
    echo 'Not equal';
}
Run Code Online (Sandbox Code Playgroud)
  • 5.x:平等
  • 7:不相等

试图在迁移指南和PHP文档中找到导致它的更改的描述,但找不到任何内容.可能它在某处,我只是错过了它.请你指点一下吗?谢谢!

我看的地方

php php-7

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

PHP7 method_exists未捕获错误:函数名必须是字符串

我收到此错误:

致命错误:未捕获错误:函数名称必须是字符串

对于此代码:

if (function_exists($item['function'])) {
    $item['function']($item, $default);
} elseif (method_exists($this, $item['function'])) {
    $this->$item['function']($item, $default);
}
Run Code Online (Sandbox Code Playgroud)

我知道将代码更改为

if (function_exists($item['function'])) {
    $item['function']($item, $default);
} elseif (method_exists($this,$item['function'])) {
    $this->{$item['function']}($item, $default);
}
Run Code Online (Sandbox Code Playgroud)

解决了这个错误,但我的问题是,应该这样

 $item['function']($item, $default);
Run Code Online (Sandbox Code Playgroud)

也被转换为

{$item['function']}($item, $default);
Run Code Online (Sandbox Code Playgroud)

还是可以保留原样?

php operator-precedence php-7

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

返回带有返回类型声明的NULL

当我遇到问题时,我正在重构一个用于PHP7的代码库,特别是实现标量类型提示和返回类型提示.

我有一个属性的类,其中一个属性.此id不是必需的(您可以在不设置ID的情况下构造对象).在创建此类的新对象时,不要设置id,并且只要将其插入db(通过单独的映射器类),它就会获得id.

此映射器类需要检查对象是否已存在于db中,并通过检查是否已设置id来执行此操作:

if(empty($exampleObject->getId())) {
    // Insert object
} else {
    // Update object
}
Run Code Online (Sandbox Code Playgroud)

我将返回类型提示应用于我的代码库中的每个函数,问题是如果我强制执行int返回类型,函数getId()不能返回NULL.It TypeErrors,即使没有启用严格的输入:

致命错误:未捕获TypeError:ExampleClass :: getId()的返回值必须是integer类型,返回null

我认为没有为此getter设置返回类型提示,但我意识到问题可能不是返回类型提示,而是我使用混合返回类型的事实.我记得在某处读过使用混合返回类型是一件坏事,但我不知道如何在不使用混合返回类型的情况下解决这个问题.我可以:

  • 在getter中抛出异常,并在mapper类中设计检查,以便捕获该异常.
  • 捕获TypeError异常,并使用它来指示未设置id.
  • 将id属性设为public,因此我可以直接调用isset.
  • 添加不同的方法 hasId() return isset($this->id)

坦率地说,不喜欢任何这些解决方案,我想知道是否有更好的选择.对于这样的案例,最佳做法是什么?

另外,如果我启用了严格的输入,我不应该只获得TypeError吗?我认为PHP7默认为"弱类型提示".

php type-hinting php-7 php-7.1

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

使用PHP7时,是否需要使用PHPDoc记录方法?

在PHP7中,当方法设置给定的参数类型和结果类型时,是否有必要在PHPDoc中再次记录它们?

以来

function foo(string $text): bool
{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

相当于

/**
 * @param string $text
 * @return bool
 */
function foo($text) {
    return true;
}
Run Code Online (Sandbox Code Playgroud)

是否有必要复制这些信息?

/**
 * @param string $text
 * @return bool
 */
function foo(string $text): bool
{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我不使用PHPDoc生成我的代码文档,而是在PHPStorm的帮助下为我和我的同事保持方法的一致性.

php phpdoc php-7

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

PHP 7接口中的静态返回类型

为什么在PHP 7中无法声明具有static返回类型的接口?

假设我有以下课程:

interface BigNumber {
    /**
     * @param BigNumber $that
     *
     * @return static
     */
    public function plus(BigNumber $that);
}

class BigInteger implements BigNumber { ... }
class BigDecimal implements BigNumber { ... }
Run Code Online (Sandbox Code Playgroud)

我想执行的返回类型plus()的方法static,那就是:

  • BigInteger::plus() 必须退货 BigInteger
  • BigDecimal::plus() 必须退货 BigDecimal

我可以通过以下方式声明接口:

public function plus(BigNumber $that) : BigNumber;
Run Code Online (Sandbox Code Playgroud)

但这并没有强制执行上述规定.我想做的是:

public function plus(BigNumber $that) : static;
Run Code Online (Sandbox Code Playgroud)

但到目前为止,PHP 7并不满意:

PHP解析错误:语法错误,意外'静态'(T_STATIC)

是否有特定原因,或者这是一个应该报告的错误?

php interface php-7

15
推荐指数
2
解决办法
3947
查看次数

PHP7与Symfony3的兼容性?

随着本周发布的PHP7Symfony3,Symfony3是否在开发时考虑到了PHP7?

换句话说,如果我们安装了PHP7并从头开始新的Symfony3项目,我们是否有可能面临Symfony框架内的迁移问题?

symfony php-7

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

php 7 php.ini upload_max_filesize无效

我在互联网上阅读了很多解决方案,但仍然无法改变upload_max_filesize价值(upload_max_filesize总是= 2M)

这是我装php.iniphpinfo():

Configuration File (php.ini) Path         /etc/php/7.0/apache2
Loaded Configuration File                    /etc/php/7.0/apache2/php.ini
Scan this dir for additional .ini files      /etc/php/7.0/apache2/conf.d 
upload_max_filesize 2M  2M
post_max_size   8M  8M
Run Code Online (Sandbox Code Playgroud)

这是我编辑php.ini/etc/php/7.0/apache2/php.ini

; http://php.net/post-max-size
post_max_size = 86M
; http://php.net/upload-max-filesize
upload_max_filesize = 40M
Run Code Online (Sandbox Code Playgroud)

即时通讯使用ubuntu 14.04,apache2,php7.0(我在php.ini每次更改后多次重置apache2)

php php-7

15
推荐指数
6
解决办法
4万
查看次数

解析错误:无效的数字文字

运行以下代码时出现以下错误:

码:

<?php
    $a = array(00001, 00008, 00009, 00012);
    print_r($a);
?>
Run Code Online (Sandbox Code Playgroud)

错误:

解析错误:无效的数字文字.

为什么会出现这个问题,我该如何解决?

php arrays octal php-7

15
推荐指数
2
解决办法
3万
查看次数