Güçlü veri yazarak hata

5 Cevap php

O kadar tanımlanmış bir arabirimde bir yöntem için "Default value for parameters with a class type hint can only be NULL" hatası alıyorum normal mi

public function nullify(bool $force=FALSE);

?

Ben bool değil, bir nesne, ve varsayılan YANLIŞ olması gerekir.

5 Cevap

There is no type hinting for boolean parameters in php (yet). You can only specify a class name or array. Therefore function foo(bool $b) means: "the parameter $b must be an instance of the class 'bool' or null".

http://docs.php.net/language.oop5.typehinting:

Functions are now able to force parameters to be objects (by specifying the name of the class in the function prototype) or arrays (since PHP 5.1).

Daha önce belirtildiği gibi, tipi ima yalnızca diziler ve nesne için çalışıyor. Sizin fonksiyonu şöyle yazılabilir:

public function nullify($force=FALSE){
  $force=(bool)$force;
  //further stuff
}

PHP 5 tipi ima belirli bir sınıfa (veya alt sınıflarından birine), ya da bir dizi sınırlıdır. Başka sayıl türlerini belirtebilirsiniz olamaz.

Zaten ama daha Hakemle belirtti. Sen bir mantıksal bir parametre zorlayamaz.

Bulunduğu gibi language.oop5.typehinting: PHP 5 tipi katkısını tanıttı

. Fonksiyonlar şimdi, arayüzler, diziler (PHP 5.1 'den beri) veya çağrılabilir (PHP 5.4 beri) [...] nesneler parametreleri zorlamak mümkün.

[...]

Tip ipuçları can not be used with scalar types int ya da string gibi. [...]

Ve language.types.intro bulunduğu gibi, PHP skalar türleri şunlardır:

- boolean
- integer
- float (floating-point number, aka double)
- string

Eğer deneyebilirsiniz:

public function nullify($force){
  if(is_object($force)) $force = false;
  ...
}

PHP yükseltme kadar geçici bir çözüm olarak düşünün.