Pour clarifier:Comment obtenir le nom de classe ou le nom de fichier de l'objet qui a inséré l'objet courant?
Je construis une classe Logger qui me permet de me connecter facilement des messages:
lib.Logger.php:
<?php
class Logger {
private $handle;
public function __construct($log_name, $log_path) {
if (! is_dir($log_path))
throw new Exception('Log path does not exist.');
if (! in_array(strtolower(substr($log_name, 0, -4)), array('.log', '.txt')))
$log_name = "{$log_name}.log";
$this->handle = fopen("{$log_path}/{$log_name}", 'a');
$this->log('------------- Initializing ------------- '.get_parent_class($this));
}
// --------------------------------------------------------------------
public function __destruct() {
fclose($this->handle);
}
// --------------------------------------------------------------------
public function log($message) {
$time = date(DATE_RFC822);
$log = "[{$time}] {$message}\n";
fwrite($this->handle, $log);
}
}
?>
Et j'appelle cela en utilisant:
MyController.php:
<?php
class MyController extends Controller {
$logger = new Logger('testlog','/path/to/logs/');
$logger->log('Logs are fun!');
}
?>
Lorsque je dans itialize l'objet:
$this->log('------------- Initializing ------------- '.get_parent_class($this));
Je veux enregistrer le nom de l'objet (ou un fichier) qui appelle log() - dans ce cas, que ce soit
MyControllerou
/path/to/MyController.php.
J'ai essayé d'utiliser get_parent_class(), mais bien sûr cela ne fonctionne pas car Logger n'a pas de classe parente en soi.
Des idées? Merci beaucoup pour l'aide!
Alex B