我自己编译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 7的预期功能之一是本机多线程(http://www.phpzag.com/php-7-expected-features-for-php-7/),但现在它未列在功能列表中http://php.net/manual/en/migration70.new-features.php你知道它是否已经实现了吗?我没有找到任何官方声明.
我注意到下面的代码导致PHP 5.x和7中的不同消息:
if ('0xFF' == 255) {
echo 'Equal';
} else {
echo 'Not equal';
}
Run Code Online (Sandbox Code Playgroud)
试图在迁移指南和PHP文档中找到导致它的更改的描述,但找不到任何内容.可能它在某处,我只是错过了它.请你指点一下吗?谢谢!
我看的地方
我收到此错误:
致命错误:未捕获错误:函数名称必须是字符串
对于此代码:
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)
还是可以保留原样?
当我遇到问题时,我正在重构一个用于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设置返回类型提示,但我意识到问题可能不是返回类型提示,而是我使用混合返回类型的事实.我记得在某处读过使用混合返回类型是一件坏事,但我不知道如何在不使用混合返回类型的情况下解决这个问题.我可以:
hasId() return isset($this->id)坦率地说,不喜欢任何这些解决方案,我想知道是否有更好的选择.对于这样的案例,最佳做法是什么?
另外,如果我启用了严格的输入,我不应该只获得TypeError吗?我认为PHP7默认为"弱类型提示".
在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 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() 必须退货 BigIntegerBigDecimal::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)
是否有特定原因,或者这是一个应该报告的错误?
我在互联网上阅读了很多解决方案,但仍然无法改变upload_max_filesize价值(upload_max_filesize总是= 2M)
这是我装php.ini的phpinfo():
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
$a = array(00001, 00008, 00009, 00012);
print_r($a);
?>
Run Code Online (Sandbox Code Playgroud)
错误:
解析错误:无效的数字文字.
为什么会出现这个问题,我该如何解决?