PHP Sınıf Dış Değişken Erişim

2 Cevap php

Aşağıdaki durum düşünün

file: ./include/functions/table-config.php containing:

.
.
$tablePages = 'orweb_pages';
.
.

file: ./include/classes/uri-resolve.php containing:

class URIResolve {
.
.
var $category;
.
.
function process_uri() {
...
    $this->category = $tablePages;
...
}
.
.
}

file: ./settings.php containing:

.
.
require_once(ABSPATH.INC.FUNC.'/table-config.php');
require_once(ABSPATH.INC.CLASS.'/uri-resolve.php');
.
.
Will this work. I mean will the access to $tablePages from process_uri() be acceptable or will it give erronous results.

Hatası oluşabilir düzeltmeleri veya geçici çözümler tavsiye edin.

2 Cevap

Küresel (önerilmez), bir sabit veya bir singleton yapılandırma sınıfını kullanın.

Basitçe dahil

$tablePages = 'orweb_pages';

diğer sınıfları içinde görünür olmayacak kadar değişken yerel kapsamı verecektir. Eğer bir sabit kullanırsanız:

define('TABLE_PAGES', 'orweb_pages');

TABLE_PAGES bakılmaksızın kapsam uygulama boyunca okuma erişimi için geçerli olacak.

Bir global değişken üzerinde sabit bir avantajı bu uygulamanın diğer alanlarında geçersiz olma konusunda endişelenmenize gerek yok olmasıdır.

Kullanın global keyword:

Eğer değer atıyorsanız dosyasında.

global $tablePages;
$tablePages = 'orweb_pages';

Ve diğer dosya:

class URIResolve {
  var $category;
  function process_uri() {
    global $tablePages;
    $this->category = $tablePages;
  }
}

Ayrıca, tüm global değişkenler (kendisi bir süper küresel değildir) $GLOBALS dizi mevcuttur, bu nedenle böyle bir şey yaparak küresel anahtar kullanmadan herhangi bir yerde genel değişkeni erişebilirsiniz:

$my_value = $GLOBALS['tablePages'];

Bu da yanlışlıkla küresel değeri üzerine için zor yapmak için hizmet vermektedir. Eski örnekte, yapılan değişiklikler $tablePages küresel değişkeni değiştirmek istiyorsunuz. Birçok güvenlik hata küresel bir $user olan ve daha güçlü bir kullanıcının bilgileri ile üzerine yazarak oluşturuldu.

Başka, daha da güvenli bir yaklaşım URIResolve için yapıcı değişkeni sağlamaktır:

class URIResolve {
  var $category;

  function __construct ($tablePages) {
    $this->category= $tablePages;
  }

  function process_uri() {
    // Now you can access table pages here as an variable instance
  }
}

// This would then be used as:
new URIResolve($tablePages);