16. oktober 2010 - 12:29Der er
7 kommentarer og 1 løsning
"global" class
jeg skal have lavet en debug klasse til hjælp til at debug'e.. nu ved jeg heller ikke om jeg griber det korrekt an, men hvordan kan man gøre noget i stil med dette uden at skal gøre $Debug global manuelt i hver eneste funktion?
class Debug { private $debug_arr = array();
function add($str) { $this->debug_arr[] = $str; } }
class Test { function Test() { // global $Debug;
$Debug->add('testen'); } }
er selvfølgelig åben overfor andre og bedre forslag :)
Som jeg umiddelbart forstår dit spørgsmål vil du lave en form for unit test på dine klasser hvilket er meget fornuftigt i sig selv.
Den måde jeg vil gøre det på er at lave et globalt array til fejlmeddelser hvor du i hver funktion tilføjer en meddelse ved en fejl. Til sidst ville jeg så have en getter til arrayet for at få det returneret.
function getArray(){ return $this->debug_arr; }
På den måde sikre du at det kun er klassen selv der kan tilføje til arrayet, altså konstatere fejl, hvilket må give den bedste integritet i din klasse.
Jamen jeg mener bare at du i din klasse har et $debug_arr som du bruger til at opsamle fejl, i alle dine functions tilføjer du så en meddelse i det globale array ved fejl og derefter bruger arrayet til at vise alle opstået fejl. Konceptet bag unit test er at laver en helt ny klasse kun med det formål at teste den rigtige klasse, så har du function til at teste alle dine "rigtige" functions. Eksempelvis:
class User{ public static function createUser($name) { $correct = false; //create user logic return $correct; } }
class UserTest { $debug = array(); require_once('user.class.php');
public static function testCreateUser($name) { if(!User::createUser($name)) { $debug[sizeof($debug)+1] = 'Fejl i oprettelse af bruger'; } }
public function getErrors(){ return $this->debug; } }
Hvis du vil have et metode i en klasse til at være 'global' skal du bare lave den statisk og også de variabler i klassen der skal bruges af statiske metoder.
I stedet for at bruge -> kalder du så variablerne med self::$variabelNavn, da de er statiske.
class Debug { private static $debug_arr = array();
static function add($str) { self::$debug_arr[] = $str; } }
Og hver gang du skal kalde en statisk metode i Debug kalder du den som: Debug::metodeNavn();
class Test { function Test() { Debug::add('testen'); } }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.