Sırasında boşaltılmış PHP Sınıf Değişkenleri Döngü

2 Cevap php

Ben şimdi bir kaç hafta için bir PHP sınıfı yazılı kurmuştur oldum ve ben onun temelleri üzerinde bir kolu var düşünmek istiyorum ama biraz stumped.

Ben ne yapıyorum basitleştirilmiş bir örnek olarak:

Ben ilan ve bir URL (http://demo.com) ile değişken dolu sınıf benim sınıf (birSınıf) ve bir dış dosyaya (config.php) bir ortak değişken ($ MyURL) örneği var.

Aynı sınıf içinde bir işlev (make_array ()), ben bir listede çıktı (dosya.php oluşturmak için sınıf dışında kullandığınız veri bir ilişkisel dizi oluşturmak için bir süre () döngü içinde bildirilen değişkeni ($ MyURL) kullanın .)

Ben bir sınıf işlevi dış dosyaya (set_myurl ($ url)) (config.php) kullanarak değişkeni ayarlamak sonra ben sayfaya set URL yazdırmak için echo kullanarak sınıf dosyasının dışında oldukça kolay erişebilirsiniz.

Ben dizi döngü olduğumda sorun geliyor ve ben benim sınıf dosyasında make_array () fonksiyonu ile inşa ediyorum ilişkisel dizi içinde çeşitli alt-diziler önceden tanımlanmış bir değişken ($ MyURL) ayarlamak istiyorum. Make_array () işlevi bir MSSQL $ sonucunu alır ve bir yoksa URL ekleyerek dizi ve ikinci argüman ($ add_my_url) oluşturarak satırlar ayarlanır true döngüler.

Fonksiyonu içinde tanımlanmış değişken) boş olur ama (PHP fonksiyonları inşa boş ile test ettik set kalır, isset () ve sorunu gidermek için bir çaba is_null ().

Kimse onlara herhangi bir bilgi ya da bu olay deneyime sahiptir merak ediyorum.

Ben ne yapıyorum kısa bir fikir

<?php
class someClass {
var $myURL = '';

public function set_myurl($url){
$this->myURL = $url;
}

public function make_array($db_result_array, $add_my_url = false){
$new_array = array();
while($row = $db_result_array){         
// build array
$array = array(
'Amount' => $row['Amount'],
'Description' => $row['Description'],
'URL' => ($add_my_url ? (!$row['URL'] ? $this->myURL : $row['URL']) : $row['URL'])
);
// merge array  
$new_array[] = $array;          
}       

return $new_array;
}

}
?>

<?php
// config.php
$myClass = new someClass;
$myClass->set_myurl('http://demo.com');

// this works and displays: http://demo.com
echo $myClass->myURL;
?>

Ben bu örnek gerçekten soyut olduğunu biliyorum ama ben PHP tam 2.000 satırları yayınlamak istemedim.

Daha fazla açıklama gerekiyorsa, isteyin lütfen. Ben aşağı bu işlev için sorun ve bu süre () döngü daralmış ettik oldukça eminim.

Teşekkürler.

2 Cevap

Ben bir şey üçlü koşulu ile yanlış olduğuna inanıyorum, bu deneyin:

class someClass
{
    public $myURL = '';

    public function set_myurl($url)
    {
        $this->myURL = $url;
    }

    public function make_array($db_result_array, $add_my_url = false)
    {
        $new_array = array();

        while ($row = $db_result_array)
        {
            // build array
            $array = array
            (
                'Amount' => $row['Amount'],
                'Description' => $row['Description'],
                //'URL' => ($add_my_url ? (!$row['URL'] ? $this->myURL : $row['URL']) : $row['URL'])
            );

            if ($add_my_url === true)
            {
                $array['URL'] = $row['URL'];

                if (empty($array['URL']))
                {
                    $array['URL'] = $this->myURL;
                }
            }

            // merge array  
            $new_array[] = $array;          
        }    

        return $new_array;
    }
}

Belki de sorun burada while($row = $db_result_array){

Sen belki için / foreach denemelisiniz?