Bu PHP hatayı düzeltmek için?

5 Cevap

Ben bir sayfanın üst gösteren bir başlık yöntemi var, benim başlığında içinde, bir sınıf içindeyse () Yeni bir Profiler nesne başlatmak için burada bu kodu çalıştırın yöntem ...

//start new page timer object
$profiler = new Profiler;
$profiler->start();

Diğer dosyaları bir demet derlenmiş sonra, ben daha sonra, bu dosyada bu kodu çalıştırın, altbilgi bölümüne bir dosya içerir

echo 'Page Generated in ' .$profiler->end(). ' of a second with ' .$_SESSION['querie_counter']. ' MySQL Queries';

Ancak ben, şimdi altbilgi dosyasında bu hata mesajı alıyorum

Notice: Undefined variable: profiler in C:\webserver\htdocs\friendproject2\includes\footer.inc.php on line 21

Fatal error: Call to a member function end() on a non-object in C:\webserver\htdocs\friendproject2\includes\footer.inc.php on line 21

Bunu nasıl düzeltebilirim?

5 Cevap

Eğer başlık yöntemi içinde $ profiler nesnesini oluşturan eğer küresel bir $ profiler global bir değişken ya da bir singleton oldu sürece, o, başka bir yöntem mevcut olmayacaktır.

Küresel yapmak için, bu satırı içerir, başlık yöntemi dışında ve sonra başlık yöntemi içinde $ profilleyiciyi beyan:

global $profiler;

De altbilgi yönteminin bu satırı içerir. Kodunuzu kalanı bunun yolu kalabilirler. Bu çalışması gerekir.

Bir işlev oluşturulan değişkenler bu işlev için yerel. Global bir değişken bildirmek için global anahtar kelime kullanın.

Ben gerçekten başlıkla ilişkili değil başlangıç, ana sınıf $profiler bir özellik yapmak ve yapıcı yöntem içinde bunu başlatmak öneririm.

Bu ana sınıfı olduğunu varsayarsak

class Example {
    private $profiler;

    public function __construct() {
        $this->profiler = new Profiler;
    }

    public function header() {
        ...
    }
}

Dahil başlığının içinde, bu nesneyi başlatmak ve başlığını çalıştırın ve sadece daha açık hale getirmek için, ayrı ayrı profiler başlangıç ​​arama yapmak:

$example = new Example();
$example->profiler->start();
$example->header();

Dahil altbilgi içinde:

$example->profiler->end();

Olası Adımlar:

  1. Her şeyden önce profiler sınıfını içeren dosyayı dahil emin olun.
  2. Bir fonksiyon içerisinde profiler örneği kullanıyorsanız, Eğer küresel anahtar kelime kullanmanız gerekir:

    global $ profiler;

Eğer başlığındaki sorunları giderildi edilecektir üst oturumu () kaldırırsanız I Think ...