有人可以解释PHP中三元运算符速记(?:)和空合并运算符(??)之间的差异吗?
他们什么时候表现不同,以同样的方式(如果这种情况发生)?
$a ?: $b
Run Code Online (Sandbox Code Playgroud)
VS.
$a ?? $b
Run Code Online (Sandbox Code Playgroud) PHP 7将于今年11月推出,它将引入Spaceship(<=>)运营商.它是什么以及它是如何工作的?
关于PHP运算符的一般参考问题,这个问题已经有了答案.
我已经使用这个repo安装了PHP 7 ,但是当我尝试运行时composer install,它给出了这个错误:
- [package]需要ext-curl* - >系统中缺少所请求的PHP扩展curl.
使用PHP 5,您可以通过运行yumor apt-get install php5-curl命令轻松安装它,但我找不到如何安装PHP 7等效项.
如何为PHP 7安装ext-curl?
我在Windows上启动PHP 7时出错.当我php在命令行上运行时,它返回一个带有系统错误的消息框:
程序无法启动,因为您的计算机缺少VCRUNTIME140.dll.尝试重新安装该程序以解决此问题.
在那之后,CLI崩溃了.
由于我不想从外部网站安装DLL文件,我不知道如何解决这个问题!
PHP版本: 7.0.0alpha1 VC14 x64线程安全
PHP 7引入了返回类型声明.这意味着我现在可以指示返回值是某个类,接口,数组,可调用或新的可阻塞标量类型之一,这对于函数参数是可能的.
function returnHello(): string {
return 'hello';
}
Run Code Online (Sandbox Code Playgroud)
通常情况下,值并不总是存在,并且您可能返回某种类型的某些内容,或者返回null.虽然您可以通过将其默认值设置为null(DateTime $time = null)来使参数可为空,但似乎没有办法为返回类型执行此操作.确实如此,或者我不知道怎么做?这些不起作用:
function returnHello(): string? {
return 'hello';
}
function returnHello(): string|null {
return 'hello';
}
Run Code Online (Sandbox Code Playgroud) 我正在使用PHP7在Ubuntu 16.04服务器上运行laravel 5.4.试图安装cviebrock/eloquent-sluggable包抛出一些错误:
pish@let:/home/sherk/ftp/www$ sudo composer require cviebrock/eloquent-sluggable
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Using version ^4.2 for cviebrock/eloquent-sluggable
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- phpunit/php-code-coverage 4.0.7 requires ext-dom * -> the requested PHP extension dom is missing from your system.
- phpunit/php-code-coverage 4.0.7 requires ext-dom * -> the requested …Run Code Online (Sandbox Code Playgroud) 不推荐使用的mcrypt-extension 将根据此处发布的评论在PHP 7.2中删除.所以我正在寻找一种加密密码的替代方法.
现在我正在使用类似的东西
mcrypt_encrypt(MCRYPT_RIJNDAEL_128, md5($key, true), $string, MCRYPT_MODE_CBC, $iv)
Run Code Online (Sandbox Code Playgroud)
我需要您对加密密码的最佳/最强方式的意见,加密密码当然应该由PHP 7.xx支持,并且还应该是可解密的,因为我的客户确实想要选择"恢复"他们的密码而不生成新的密码一.
我在PHP 7中使用返回类型提示遇到了一些问题.我的理解是提示: self意味着你打算让一个实现类返回自己.因此我: self在我的界面中使用来表示,但是当我尝试实际实现接口时,我遇到了兼容性错误.
以下是我遇到的问题的简单演示:
interface iFoo
{
public function bar (string $baz) : self;
}
class Foo implements iFoo
{
public function bar (string $baz) : self
{
echo $baz . PHP_EOL;
return $this;
}
}
(new Foo ()) -> bar ("Fred")
-> bar ("Wilma")
-> bar ("Barney")
-> bar ("Betty");
Run Code Online (Sandbox Code Playgroud)
预期的产出是:
弗雷德威尔玛巴尼贝蒂
我实际得到的是:
PHP致命错误:声明Foo :: bar(int $ baz):Foo必须与iFoo :: bar(int $ baz)兼容:第7行的test.php中的iFoo
问题是Foo是iFoo的一个实现,所以据我所知,实现应该与给定的接口完全兼容.我可以通过更改接口或实现类(或两者)来修复此问题,以通过名称而不是使用返回提示接口self,但我的理解是语义上self意味着"返回您刚刚调用方法的类的实例" ".因此,将其更改为接口意味着理论上我可以返回实现接口的任何实例,而我的意图是调用实例将返回的内容.
这是PHP的疏忽还是这是一个刻意的设计决定?如果它是前者有任何机会看到它在PHP 7.1中修复?如果没有,那么正确的返回提示是什么,你的界面希望你返回刚刚调用方法的实例进行链接的正确方法是什么?
php 7是否支持类属性的类型提示?
我的意思是,不仅仅是针对建立者/吸气者,而是针对房产本身.
就像是:
class Foo {
/**
*
* @var Bar
*/
public $bar : Bar;
}
$fooInstance = new Foo();
$fooInstance->bar = new NotBar(); //Error
Run Code Online (Sandbox Code Playgroud) 我正在测试PHP7,并在最近的更新后出现了一个奇怪的问题.默认情况下应该启用SimpleXML,我的phpinfo页面显示它可用:
但是,这些功能不可用:
<?php
if (function_exists('simplexml_load_file')) {
echo "simpleXML functions are available.<br />\n";
} else {
echo "simpleXML functions are not available.<br />\n";
}
// result-- NOT available
Run Code Online (Sandbox Code Playgroud)
并且该模块未列为已加载:
~ $ php -m
[PHP Modules]
calendar
Core
ctype
curl
...
Reflection
session
shmop
sockets
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
Zend OPcache
zlib
Run Code Online (Sandbox Code Playgroud)
任何人都知道这是否有解决方法?
版本信息:
~ $ php -v
PHP 7.0.3-8+deb.sury.org~trusty+2 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies …Run Code Online (Sandbox Code Playgroud) php-7 ×10
php ×9
type-hinting ×3
return-type ×2
attributes ×1
composer-php ×1
curl ×1
dll ×1
encryption ×1
interface ×1
laravel ×1
laravel-5.4 ×1
mcrypt ×1
nullable ×1
operators ×1
passwords ×1
simplexml ×1
windows ×1