我非常渴望开始使用PHP 7但是有一个问题正在阻碍...我主要使用MongoDB作为数据库,问题是我不知道如何为PHP 7安装MongoDB驱动程序/客户端.
我目前的安装是PHP 5.6和我的Mac brew install php56-mongo上的诀窍.
任何人都可以推荐我如何在我的Mac或Ubuntu安装上工作?
在此先感谢,非常感谢!
我正忙着创建一个应用程序,我想使用PHP 7返回类型.现在我在php.net上读到,这是一个设计决定,null在定义返回类型时不允许返回.
处理这个问题的正确方法是什么?
一个选项是try ... catch块:
public function getMyObject() : MyObject
{
return null;
}
try
{
getMyObject();
}
catch(Exception $e)
{
//Catch the exception
}
Run Code Online (Sandbox Code Playgroud)
我对此没有很好的感觉,因为我的代码将是一个巨大的尝试... catch块因为我需要为每个返回对象的方法编写一个try ... catch块.
该空对象模式是一个很好的解决办法,但我不喜欢这个主意,以创建一个NullObject在我的应用程序的每个对象.有没有正确的方法来做到这一点?
PHP7最近引起了很多关注,承诺出色的性能和更成熟的语言.版本7.0.0-alpha已经发布.我们刚刚开始重做我们的核心应用程序,它使用MongoDB作为数据源.
我想知道是否有任何开发正在进行兼容PHP7的MongoDB扩展?这有多远啊?还有其他选择吗?
我根据本手册在Ubuntu上安装了PPA的php5.6和php7.0
http://lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu
但我没有得到如何使用peclphp5.6或php7.0 安装扩展.
例如,我已经安装的版本,libevent或amqp在php5.6.
现在当我输入pecl install libevent和我的活动php版本是php7.0(使用update-alternatives --set php /usr/bin/php7.0),pecl returns message thatlibevent`已经安装.
但它只安装了php5.6(这个版本是活动的),现在我想为php7.0做.
哪些命令对我有帮助?
UPD
我发现这个命令用于将pecl切换到php7.0并将它们分发给可执行的bash脚本:
#!/bin/bash
sudo update-alternatives --set php /usr/bin/php7.0
sudo pecl config-set php_ini /etc/php/7.0/cli/php.ini
sudo pecl config-set ext_dir /usr/lib/php/20151012/
sudo pecl config-set bin_dir /usr/bin/
sudo pecl config-set php_bin /usr/bin/php7.0
sudo pecl config-set php_suffix 7.0
Run Code Online (Sandbox Code Playgroud)
并为php5.6
#!/bin/bash
sudo update-alternatives --set php /usr/bin/php5.6
sudo pecl config-set php_ini /etc/php/5.6/cli/php.ini
sudo pecl config-set ext_dir /usr/lib/php/20131226/
sudo pecl config-set …Run Code Online (Sandbox Code Playgroud) 在PHP 7向后兼容的改变文件说,有关的foreach如下:
在默认的按值模式下使用时,
foreach现在将对正在迭代的数组的副本进行操作,而不是对数组本身进行操作.这意味着在迭代期间对数组所做的更改不会影响迭代的值.
我试图理解这意味着什么,我的主要问题是这个代码在PHP 7中是否与PHP 5.6中的相同?
foreach($array as $elementKey => $element) {
if ($element == 'x') {
unset($array[$elementKey]);
}
}
Run Code Online (Sandbox Code Playgroud)
我的两个问题是:
这段代码还能用吗?
如果是这样,你能解释一下(可能通过例子)PHP 7中的这一新变化意味着什么吗?
编辑
我一直在重读这份文件声明.我认为这意味着,如果您更改数组中较低项的值,那么当您在迭代中找到这些项时,这些更改将不会存在.例:
$array = ['x', 'y', 'z'];
$new = [];
foreach($array as $element) {
if ($element == 'x') {
$array[2] = 'a';
}
$new[] = $element;
}
print_r($new);
Run Code Online (Sandbox Code Playgroud)
但是,当我运行这个例子时,它似乎没有显示PHP版本的任何差异(虽然我以前从未使用过这个工具,所以我不确定它是如何工作的).
我意识到,如果我通过参考来做,我会得到一个a新的.否则我不会.但这两个版本似乎都是这种情况.
我真正需要知道的是什么是不兼容性(例如)?
编辑2
@NikiC 建议的答案链接提供了我正在寻找的故事的其余部分:
在大多数情况下,这种变化是透明的,除了更好的性能外没有其他影响.但是有一种情况会导致不同的行为,即数组事先是参考的情况:
$array = [1, 2, 3, 4, 5]; …Run Code Online (Sandbox Code Playgroud) PHP 7是否支持严格的资源类型?如果是这样,怎么样?
例如:
declare (strict_types=1);
$ch = curl_init ();
test ($ch);
function test (resource $ch)
{
}
Run Code Online (Sandbox Code Playgroud)
以上将给出错误:
致命错误:未捕获的TypeError:传递给test()的参数1必须是资源的实例,给定资源
var_dump on $ch显示它是资源(4,curl),手册说curl_init ()返回资源.
是否可以严格键入test()功能来支持$ch variable?
我正在运行Windows 10新副本,我刚刚安装了visual studio代码.我正在尝试使用VS Code开发一个PHP项目.但我在设置环境方面遇到了麻烦.
我看到一篇博文,我下载了PHP 7的二进制文件并将其放在"C"驱动器中.然后我也设置路径变量.
但是,我仍然遇到这个问题.
我正在从客户端发送POST请求(使用curl和自定义nodejs脚本测试)并且没有正确地返回响应.整个过程适用于PHP 5.6.
整个事情尽可能减少:
--disable-all --enable-fpm我正在使用的最小nginx站点配置:
server {
listen 80;
server_name localhost;
location / {
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_pass unix:/var/run/php/php7.0-fpm-api.sock;
fastcgi_param SCRIPT_FILENAME /vagrant/index.php;
}
}
Run Code Online (Sandbox Code Playgroud)
示例PHP脚本来自/vagrant/index.php:
<?php
echo str_repeat('.', 512);
flush(); // not necessary, only due testing
Run Code Online (Sandbox Code Playgroud)
我正在使用的卷曲电话: curl -XPOST http://localhost/ -H "Transfer-Encoding: chunked" -d ''
我正在使用的NodeJS脚本:
'use strict';
var http = require('http');
var url = require('url');
var uri = url.parse(process.env.URL);
var options = …Run Code Online (Sandbox Code Playgroud) 有没有人知道在Windows上支持PHP7的Memcache版本?
Memcache非常适合PHP 5.6(在Windows上),但我找不到PHP7的版本.
我在哪里可以使用,我应该使用PHP 7中提供的匿名类?我找不到他们的用例.
$message = (new class() implements Message {
public function getText() { return "Message"; }});
Run Code Online (Sandbox Code Playgroud)