Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Site Web > PHP > [poo] Utiliser le même objet dans plusieur méthode > Lecture du sujet

[poo] Utiliser le même objet dans plusieur méthode

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne Horizon # Posté le 12/10/2008 à 20:35:16
Avatar
Groupe : Membres
Bonjour à tous
Comment faire pour que certain objet soit accessible dans plusieurs méthode d'une même class ?
J'ai regarder la doc et le seul truc que j'ai trouver c'est "parent" mais il s'utilise uniquement pour une autre class.

function Errors()
{
$this->errno = $errno;
$this->errstr = $errstr;
$this->errfile = $errfile;
$this->errline = $errline;
}

function error_handler()
{
echo errno //objet que je veut récupérer
}

Merci d'avance
Hors ligne Tracker # Posté le 12/10/2008 à 20:48:25
Avatar
Groupe : Membres
Tu le mets en propriété:

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
class A
{
  public function dummy()
  {
    return 'ouais...';
  }
}

class B
{
  protected $_a;

  public function __construct(A $a)
  {
    $this->_a = $a;
  }

  // ensuite toutes les méthodes d'une instance de B ont accès
  // à l'intance de A fournie à son constructeur.

  public function test()
  {
    echo $this->_a->dummy();
  }
}

// pour tester:
$b = new B(new A());
$b->test();

Sinon peut-être je réponds à côté, car je pige pas le rapport avec le code que tu as fourni.


Tracker.
Édité le 12/10/2008 à 20:52:49 par Tracker

Un peu de lecture: PHP // MySQL // JavaScript // w3schools // SQL
 
Hors ligne Horizon # Posté le 12/10/2008 à 23:27:28
Avatar
Groupe : Membres
C'est pas exactement se que je charche à faire

Voici une partit de la class pour mieux comprendre:

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
define('FILE_PATH', 'Cache/error.log');
define('WRITE_LOG', true);
class Errors
{
   function Errors() // récupération des info de l'erreur
   { 
      $this->errno = $errno;
      $this->errstr = $errstr;
      $this->errfile = $errfile;
      $this->errline = $errline;
   }

   function Error_log($errno, $errstr, $errfile, $errline) 
   {
      //enregistrement de l'erreur dans un fichier au format xml
      //methodes pas encore créer
			
      if(file_exists(file_path))
      {
           $xml = simplexml_load_file(file_path);
           print_r($xml);
      } 
		
      else
      {
           $this->write_key($file_path);
           $this->write_error(1, $errno, $errstr, $errfile, $errline, $file_path);
      }
   }
	
   function error_handler($errno, $errstr, $errfile, $errline) // Affichage du message
   {
           switch($errno) 
           {
                case E_USER_NOTICE:
                case E_NOTICE:
                $errstr = printf('<strong>Remarque: </strong>ligne</strong> %s, %s', $errline, $errfile);
                break;
			
                case E_USER_WARNING:
                case E_WARNING:
                $errstr = printf('<strong>Attention: </strong>ligne</strong> %s, %s', $errline, $errfile);
                break;
                //Erreur fatale.
                case E_USER_ERROR:
                case E_ERROR:
                $errstr = printf('<strong>Erreur fatale: </strong>ligne</strong> %s, %s', $errline, $errfile);
                default:
                $errstr = printf('<strong>Erreur :</strong> Cause inconnue ligne %s, %s', $errline, $errfile);
           }
   }
}

$exception = new Errors();
set_error_handler(array($exception, 'error_handler'));
echo $no_var;
// variable non déclarer pour tester la class
?>


Les variables $errno, $errstr, $errfile, $errline reviennent souvent dans mon code donc c'est pour sa que je voudrais que les méthodes hérite les objets du constructeur pour éviter de passer a chaque fois les mêmes arguments.

Mais je voudrais avoir une seul class, je trouve que créer une class juste pour une méthode c'est pas super.
Édité le 12/10/2008 à 23:31:37 par Horizon
Hors ligne Tracker # Posté le 13/10/2008 à 00:32:53
Avatar
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Tu as un soucis dans l'ordre des opérations, ton exception doit être créée au moment de l'erreur:

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
define('FILE_PATH', 'Cache/error.log');
define('WRITE_LOG', true);

class MyException extends Exception
{
   public static function handle($errno, $errstr, $errfile, $errline)
   {
      throw new MyException($errno, $errstr, $errfile, $errline);
   }
	
   private $errno, $errstr, $errfile, $errline;
   public function __construct($errno, $errstr, $errfile, $errline)
   {
      $this->errno = $errno;
      $this->errstr = $errstr;
      $this->errfile = $errfile;
      $this->errline = $errline;
		
      parent::__construct($errstr, $errno);
   }
	

   function log() 
   {
      //enregistrement de l'erreur dans un fichier au format xml
      //methodes pas encore créer
			
      if(file_exists(file_path))
      {
           $xml = simplexml_load_file(file_path);
           print_r($xml);
      } 
		
      else
      {
           $this->write_key($file_path);
           $this->write_error(1, $file_path);
      }
   }
	
   function display()
   {
      switch($this->errno) 
      {
         case E_USER_NOTICE:
         case E_NOTICE:
            printf('<strong>Remarque: </strong>ligne</strong> %s, %s', $this->errline, $this->errfile);
            break;
         case E_USER_WARNING:
         case E_WARNING:
            printf('<strong>Attention: </strong>ligne</strong> %s, %s', $this->errline, $this->errfile);
            break;
         // Erreur fatale.
         case E_USER_ERROR:
         case E_ERROR:
            printf('<strong>Erreur fatale: </strong>ligne</strong> %s, %s', $this->errline, $this->errfile);
            break;
         default:
            printf('<strong>Erreur :</strong> Cause inconnue ligne %s, %s', $this->errline, $this->errfile);
      }
   }
}

set_error_handler(array('MyException', 'handle'));
echo $no_var;
// variable non déclarer pour tester la class
?>



Tracker.
Édité le 13/10/2008 à 00:40:21 par Tracker

Un peu de lecture: PHP // MySQL // JavaScript // w3schools // SQL
 
Hors ligne Horizon # Posté le 14/10/2008 à 00:50:46
Avatar
Groupe : Membres
Merci pour avoir corriger la class, j'y serrais vraiment pas arriver tout seul :(
Un petite question : tu utilise static, pourquoi ne pas instancier la class plutôt ?
Édité le 14/10/2008 à 00:51:46 par Horizon
Hors ligne Tracker # Posté le 14/10/2008 à 08:28:54
Avatar
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
J'utilise static justement pour ne pas avoir à créer la classe, j'ai besoin d'un instance de cette dernière au moment d'une erreur pas quand je référence le handler d'erreur au début de mon script. J'ai donc besoin d'un fonction pour créer l'exception. Donc, à la place, j'utilise une méthode statique ~= fonction, la seule différence c'est qu'elle appartient à l'objet et donc accède sans problème de portée à ses propriétés statiques (ou non statique sur instance que tu aurais fournie).


Tracker.
Édité le 14/10/2008 à 08:36:27 par Tracker

Un peu de lecture: PHP // MySQL // JavaScript // w3schools // SQL
 
Hors ligne Horizon # Posté le 15/10/2008 à 07:44:09
Avatar
Groupe : Membres
Merci pour les explication.

Retour au forum "PHP" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 47 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0666s (0.0481s)