Yazma bağlamında yöntem dönüş değeri kullanamazsınız

6 Cevap

Ben aşağıdaki kod parçası çalışması gerektiğini düşünürdüm, ama öyle değil:

if (!empty($r->getError()))

Where getError() is simply

    public function getError()
{
    return $this->error;
}

Oysa ben bu hata ile sona:

can't use method return value in write context

Bunun anlamı nedir? Bu sadece bir okuma değil midir?

Şimdiden teşekkürler!

6 Cevap

Note: Bu bir yüksek görünürlük ile çok yüksek olarak cevap, ama kötü, gereksiz kodlama uygulamaları teşvik unutmayın! @porneL's answer doğru bir şekilde için bkz.

Note #2: Ben önerileri kullanmak onaylamaz @porneL's answer. Ben üç yıl önce bu cevabı yazdığımda, ben sadece hata doğasını açıklamak içindir, mutlaka alternatif onaylamaz. Aşağıdaki pasajı kod tavsiye edilmez.


Bu 5.5 altında PHP sürümlerinde empty() bir sınırlama var.

Note: empty() only checks variables as anything else will result in a parse error. In other words, the following will not work: empty(trim($name)).

Bu değiştirmek olurdu

// Not recommended, just illustrates the issue
$err = $r->getError();
if (!empty($err))

empty() 5.5 geçici değerlere göndermeler destek vermedi önce, ve PHP işlevleri döndü (var bir şey bu referans noktaları olup olmadığını kontrol etmek için) referans olarak değer erişmek gerekiyor.

Ancak, sahip gerçek sorun yanlışlıkla "boş" değer "false" herhangi bir farklı olduğuna inanan, hiç empty() kullanmaktır.

Boş !isset($thing) || !$thing sadece bir takma addır. Eğer kontrol ediyoruz şey her zaman var olduğu zaman, empty() fonksiyonu nothing but a negation operator.

PHP doesn't have concept of emptyness. False değerlendirmek Değerler true olarak değerlendirmek değerleri olmayan boş, boş. Bu aynı şey. Bu kod:

$x = something();
if (empty($x)) …

ve bu:

$x = something();
if (!$x) …

always the same result, in all cases, for all datatypes ($x tanımlandığı için empty() gereksiz) sahiptir.

Yönteminden dönüş değeri her zaman vardır (eğer yoksa bile return ifadesi, dönüş değeri varsa ve içerdiği null). Bu yüzden:

if (!empty($r->getError()))

mantıksal olarak eşdeğerdir:

if ($r->getError())

Göre the PHP docs,

boş () sadece başka bir şey gibi değişkenleri kontrol bir çözümleme hatası neden olur

Bir işlevin dönüş değeri doğrudan empty() kullanamazsınız. Bunun yerine, değişken üzerinde empty() bir değişkene ve çalıştırmak için getError() dan dönüşünü ayarlayın.

Ben genellikle sadece bu soruna almak için is_empty denilen küresel bir function () oluşturmak

function is_empty($var)
{ 
 return empty($var);
}

Sonra yerde ben normalde kullanılan olurdu boş () Ben sadece kullanmak is_empty ()

Başkaları tarafından da belirtildiği gibi, bu) boş bir (garip) sınırlaması (bulunuyor.

Çoğu purproses için, bunu yaparken boş çağrı olarak eşit, ama bu işleri:

if ($r->getError() != '')

Sorun, hata boş olup olmadığını bilmek istiyorum, bu.

public function getError() {
    return $this->error;
}

Bir yöntem isErrorSet ekleme () sorunu çözecektir.

public function isErrorSet() {
    if (isset($this->error) && !empty($this->error)) {
        return true;
    } else {
        return false;
    }
}

Şimdi bu hiçbir haber ile bu kod ile cezası çalışacaktır.

if (!($x->isErrorSet())) {
    echo $x->getError();
}