2015-07-19 12 views
8

dosyasının başında PHP 7'yi, özellikle de return type declaration ve type hinting'u kontrol ediyordum. PHP 7'yi kaynaktan (Github'dan master şubesi) derledim ve Ubuntu 14.04 sanal kutusunda çalıştırdım. Yeni bir Exceptions sınavına girmek için aşağıdaki kodu çalıştırmayı denedim. Ama boş bir sayfa verdi.Beyan ederseniz boş sayfa (strict_types = 1); PHP 7'de

<?php 

function test(): string { 

    return []; 
} 

echo test(); 

Ardından, ekranda görüntülenecek hatayı ayarlamam gerektiğini anlıyorum. Bu yüzden aşağıda gibi eski moda ini_set('display_errors', 1);, ben aşağıdaki gibi üstündeki declare(strict_types=1); eklendi ileri Kazı bu Throwable interface RFC

Fatal error: Uncaught TypeError: Return value of test() must be of the type string, array returned in /usr/share/nginx/html/test.php on line 7 in /usr/share/nginx/html/test.php:7 Stack trace: #0 /usr/share/nginx/html/test.php(10): test() #1 {main} thrown in /usr/share/nginx/html/test.php on line 7

göre beklendiği gibi bana TypeError aşağıdaki verdi

<?php 
ini_set('display_errors', 1); 

function test(): string { 

    return []; 
} 

echo test(); 

,

<?php declare(strict_types=1); 

ini_set('display_errors', 1); 

function test(): string { 

    return []; 
} 

echo test(); 
eklendi

ve bang, hata beni boş bir sayfa ile bırakarak kayboldu. Bana neden boş bir sayfa verdiğini anlayamıyorum?

cevap

15

google etrafında arama ve RFC'lere sonra

This RFC further proposes the addition of a new optional per-file directive, declare(strict_types=1);, which makes all function calls and return statements within a file have “strict” type-checking for scalar type declarations, including for extension and built-in PHP functions.

Bu orada direktif declare(strict_types=1) yanlış bir şey oldu ama sorun ben ini_set() işlevini çağırıyordu yoluydu demektir RFC yılında follwing cümle geldi. İkinci parametrenin string türünde olmasını bekler.

string ini_set (string $varname , string $newvalue) 

yerine int geçiyordu ve dolayısıyla hataları görüntülemek için gereken ayar kendisi ayarlamak için başarısız oldu ve dolayısıyla PHP katı modda boş bir sayfayla vuruldu. Daha sonra kodu biraz değiştirdim ve aşağıdaki gibi "1" dizesini geçtim ve işe yaradı.

<?php declare(strict_types=1); 

ini_set('display_errors', "1"); 

function test(): string { 

    return []; 
} 

echo test(); 
+4

Cevap vermek için geri döndüğünüz için, muhtemelen 7 ile oynamaya başladığımda muhtemelen aynı şeyle karşılaşırdım. – dops

0

hata olarak, işlevin dizgeyi döndürmesini beklediğini ancak bunun yerine bir dizi döndürdüğünü bildiriyor! Ve fonksiyon normal olan şikayet ediyor. Yani dönüşünüzde sadece bir dize değeri koyun. Bu kadar!