PHP sınıfı değişken seti / sorun olsun

2 Cevap php

Benim Linux makinenin çalışma süresini alır bir PHP sınıfı yazmak için çalıştık. Bu will doğru süresini olsun, ama ben yük ortalama "yüksek" ya da değil ve bir uyarı kodu ayarlamak olup olmadığını belirler, ve öyle değil, bir if bildirimde (0 olarak kalır) çalışıyor gibi görünüyor.

Ben dışarı alabilir biliyorum ama yine de yanlış burada neler olup bittiği hakkında biraz bilgi vermedi çünkü ben sınıf (50 ya da öylesine hatları) Burada tüm kodu dahil ettik.

<?php
class loadavg {

    private $divisor, $status;

    public function __construct($set_divisor = 1){
        $this->divisor = $set_divisor;
    }

    public function __toString(){
        return $this->load(1).', '.$this->load(5).', '.$this->load(15)."\n";
    }

    public function load($time = 1){
        $loadfile = shell_exec('cat /proc/loadavg');
        $split = preg_split('/ /', $loadfile);

        if ($split[1] > (2 * $this->divisor)){
            $this->status = 3;
        } else if ($split[1] > $this->divisor){
            $this->status = 2;
        } else {
            $this->status = 1;
        }

        switch($time){
            case 1:
                return $split[0];
            case 5:
                return $split[1];
            case 15:
            return $split[2];
        }
    }

    public function status_name(){
        switch ($this->status){
            case 3:
                return 'critical';
            case 2:
                return 'warn';
            case 1:
                return 'ok';
            case 0:
                return 'error';
        }
    }
}
?>

2 Cevap

<?
class loadavg {

    private $divisor, $status;

    public function __construct($set_divisor = 1){
        $this->divisor = $set_divisor;
    }

    public function __toString(){
        return $this->load(1).', '.$this->load(5).', '.$this->load(15)."\n";
    }

    public function load($time = 1){
        //$loadfile = shell_exec('cat /proc/loadavg');
        $loadfile = '1.5 1.5 1.5';
        $split = preg_split('/ /', $loadfile);

        if ($split[1] > (2 * $this->divisor)){
            $this->status = 3;
        } else if ($split[1] > $this->divisor){
            $this->status = 2;
        } else {
            $this->status = 1;
        }

        switch($time){
            case 1:
                return $split[0];
            case 5:
                return $split[1];
            case 15:
            return $split[2];
        }
    }

    public function status_name(){
        switch ($this->status){
            case 3:
                return 'critical';
            case 2:
                return 'warn';
            case 1:
                return 'ok';
            case 0:
                return 'error';
        }
    }
}

$la = new loadavg();
print($la);
print($la->status_name()); 

Ben sadece bu idam ve çıkışı var:

1.5, 1.5, 1.5
warn

Bu beklenen bu değil mi? Ben print ($ la) deyimi çıkarırsanız, çıktı şudur:

error

load () fonksiyonu durumunu ayarlamak için asla denir çünkü bu. Eğer durum doğru şekilde basılı olmasını istiyorsanız, önce yük () çalıştırmak zorunda. Ben status_name ve bu gibi, dönmeden önce yük aramak için zaman parametresini eklemek isterdim varsayalım:

public function status_name($time =1){
    $this->load($time);
    switch ($this->status){
        case 3:
            return 'critical';
        case 2:
            return 'warn';
        case 1:
            return 'ok';
        case 0:
            return 'error';
    }
}

Şimdi bunu size sağlayacak olan:

$la = new loadavg();
print($la->status_name(5)); 

Sizin kod tasarımı olabilir onun kullanımı daha az sezgisel yapar rağmen, sorunsuz görünen. Ben, bir dosyada sınıf tanımını koymak altına aşağıdaki satırları ekledi, ve ne zaman koşmak ok 'yazdırır.

$load = new loadavg ();
$load->load (5);
echo $load->status_name () . "\n";

Lütfen sınıfın tasarımı hakkında garip bir şey, benim için, bu başlatma sırasında 'yükleme' izin vermez olduğunu, ancak loadavg nesne yazdırmak için çalıştığınızda, sadece yük otomatik olarak çağırır. Eğer () ilk açıkça çağıran yüksüz) (status_name erişebilir olmak istiyorsanız, sadece (... sadece bölen gibi kılınabilir mantıklı varsayılan belki) __ konstruktunda yükü arayabilirsiniz