SORU
12 Ocak 2011, ÇARŞAMBA


PHP uyarı: Arama referans olarak geçmek onaylanmaz

Uyarı: aşağıdaki kod satırlarını için Call-time pass-by-reference has been deprecated:

function XML() {
    $this->parser = &xml_parser_create();
    xml_parser_set_option(&$this->parser, XML_OPTION_CASE_FOLDING, false);
    xml_set_object(&$this->parser, &$this);
    xml_set_element_handler(&$this->parser, 'open','close');
    xml_set_character_data_handler(&$this->parser, 'data');
}
function destruct() {
    xml_parser_free(&$this->parser);
}
function & parse(&$data) {
    $this->document = array();
    $this->stack    = array();
    $this->parent   = &$this->document;
    return xml_parse(&$this->parser, &$data, true) ? $this->document : NULL;
}

Bunu nasıl düzeltebilirim ve neden?

CEVAP
12 Ocak 2011, ÇARŞAMBA


&$this & her yerde kaldırmak gerekli değildir. Aslında & her yerde bu kodu kaldırabilirsiniz bence gerekli değil.

Uzun açıklama

PHP iki şekilde değişkenleri geçmesine izin verir: "değer" ve "başvuru". Birinci yol ("değer"), onları, diğer ikinci yolu değiştirebilirsiniz. ("referans"):

     function not_modified($x) { $x = $x 1; }
     function modified(&$x) { $x = $x 1; }

& işareti unutmayın. Eğer bir değişken modified ararsam eğer bağımsız değişken değeri aynı olacaktır döndürür sonra not_modified, ararsam değiştirilmiş olacak.

PHP bunu yaparak not_modified 12 *davranışını simüle etmek için izin verilen eski sürüm: not_modified(&$x). Bu "arama başvurusu geçer". İtiraz ve asla kullanılmamalıdır.

Sen nesneleri değiştirmek ayrıca, çok eski PHP sürümleri (okuma: 4 ve daha önce PHP),, referans, böylece &$this kullanımı ile geçmesi. Bu ne gerekli ne de nesne her zaman işleve, değişiklik olarak artık tavsiye, başka bir deyişle, bu gibi çalışır:

   function obj_modified($obj) { $obj->x = $obj->x 1; }

Bu resmen geçmiş olsa bile $obj->x değiştir "değer", ama geçirilen kolu (Java, vb.) nesne. ve PHP 4'te olduğu gibi nesnenin kopyası değil.

Bu, garip bir şey yapmadıktan sonra, neredeyse hiç nesne (ve böylece $this başvuru, çağrı-zaman veya başka bir şekilde) geçmek gerekiyor demektir. Özellikle, kod ihtiyacı yok.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
Php

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • amc

    amc

    21 EYLÜL 2005
  • Mark Hyder

    Mark Hyder

    6 EKİM 2011
  • megablueblaster

    megablueblas

    23 HAZİRAN 2006