Un objet au sein d'un problème d'objet

  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8212
  • Loc: USA
  • Status: Offline

Message Mai 14th, 2011, 1:26 am

J'ai obtenu le code suivant
PHP Code: [ Select ]
class template {
    function template()
    {
        $this->time = new time();
    }
}
 
class time {
    function format_time($a, $b)
    {
        return date($a, $b);
    }
}
  1. class template {
  2.     function template()
  3.     {
  4.         $this->time = new time();
  5.     }
  6. }
  7.  
  8. class time {
  9.     function format_time($a, $b)
  10.     {
  11.         return date($a, $b);
  12.     }
  13. }

puis dans puis dans le fichier de modèle, je tente d'y accéder comme
PHP Code: [ Select ]
<?=$tpl->time->format_time($c, $d);?>

C'est en me jetant l'erreur suivante:
Quote:
Fatal error: Call à un format_time fonction membre () sur un non-objet dans C: \ wamp \ www \ CMS \ style \ default \ viewpost.php sur la ligne 24

Comment puis-je corriger cette erreur?

Quand je fais print_r ($ this-> temps) ou var_dump ($ this-> temps) dans la classe de modèle, il me raconte son objet.
var_dump
Quote:
objet (le temps) #15 (0) {}

print_r
Quote:
Objet time ()
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Mai 14th, 2011, 1:26 am

  • WritingBadCode
  • Graduate
  • Graduate
  • Avatar de l’utilisateur
  • Inscription: Avr 28, 2011
  • Messages: 214
  • Loc: Sweden
  • Status: Offline

Message Mai 14th, 2011, 1:53 am

Je ne sais pas sur les points suivants:

$ Tpl-> format_time temps-> ($ c, $ d);

Essayez:

$ Tpl = time () -> format_time ($ c, $ d);

OU:

$ Tpl = nouveau temps ();
format_time $ tpl-> ($ c, $ d);
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8212
  • Loc: USA
  • Status: Offline

Message Mai 14th, 2011, 2:02 am

Le truc avec $ tpl est que tpl $ détient la classe de modèle. Je ne peux pas qu'il soit fixé à un objet différent.

Raison de cette me déconcerte, car il a toujours travaillé pour moi...j'ai peut-être tout simplement oublié comment faire.
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8212
  • Loc: USA
  • Status: Offline

Message Mai 14th, 2011, 2:20 am

Désolé, je suppose que je ne serais pas si secret que ce que mes classes contiennent :lol:

template.php
PHP Code: [ Select ]
<?php
/*
 * template.php ~ The template class for the CMS
 */
 
// Making sure there are no unauthorized use of this page
if(!defined('IN_CMS'))
{
    die(NOT_IN_CMS);
}
 
class template {
 
    // Initiating the public class variables
   public $templateDir;    // The Locationg of the Template Files
   public $css;            // The Location of the CSS Files
   public $meta;           // The meta information
   public $time;           // The time class
   
   /*
    * function template( void )
    *
    * Constructor function for the class that sets the needed variables
    */
   
   function template()
   {
       global $root, $sess;
       
       // If we are logged in
       $this->logged_in = $sess->logged();
       
        $this->iconUrl = "{$root}images/icons";
       
        // Setting some global template variables
        $this->time = new time();
    }
   
   /*
    * public function display( $file1, $file2, $file2 ... )
    *
    * The function that displays the page
    */
   
   public function display($file)
   {
        global $root;
       
      // Allowing the class to be accessible throughout the design
      $tpl = $this;
     
      // The CSS inclusion code
      $this->css = "{$root}style/{$this->templateDir}/style";
     
        // Looping through each file we need to include and include it
        foreach(func_get_args() as $file)
        {
            // Checking if the file is valid and if it exists
            if(!strpos('.', $file) && !strpos('/', $file) && file_exists("{$root}style/{$this->templateDir}/{$file}.php"))
            {
                // Including the actual site design
                include_once("{$root}style/{$this->templateDir}/{$file}.php");
            }
        }
    }
}
  1. <?php
  2. /*
  3.  * template.php ~ The template class for the CMS
  4.  */
  5.  
  6. // Making sure there are no unauthorized use of this page
  7. if(!defined('IN_CMS'))
  8. {
  9.     die(NOT_IN_CMS);
  10. }
  11.  
  12. class template {
  13.  
  14.     // Initiating the public class variables
  15.    public $templateDir;    // The Locationg of the Template Files
  16.    public $css;            // The Location of the CSS Files
  17.    public $meta;           // The meta information
  18.    public $time;           // The time class
  19.    
  20.    /*
  21.     * function template( void )
  22.     *
  23.     * Constructor function for the class that sets the needed variables
  24.     */
  25.    
  26.    function template()
  27.    {
  28.        global $root, $sess;
  29.        
  30.        // If we are logged in
  31.        $this->logged_in = $sess->logged();
  32.        
  33.         $this->iconUrl = "{$root}images/icons";
  34.        
  35.         // Setting some global template variables
  36.         $this->time = new time();
  37.     }
  38.    
  39.    /*
  40.     * public function display( $file1, $file2, $file2 ... )
  41.     *
  42.     * The function that displays the page
  43.     */
  44.    
  45.    public function display($file)
  46.    {
  47.         global $root;
  48.        
  49.       // Allowing the class to be accessible throughout the design
  50.       $tpl = $this;
  51.      
  52.       // The CSS inclusion code
  53.       $this->css = "{$root}style/{$this->templateDir}/style";
  54.      
  55.         // Looping through each file we need to include and include it
  56.         foreach(func_get_args() as $file)
  57.         {
  58.             // Checking if the file is valid and if it exists
  59.             if(!strpos('.', $file) && !strpos('/', $file) && file_exists("{$root}style/{$this->templateDir}/{$file}.php"))
  60.             {
  61.                 // Including the actual site design
  62.                 include_once("{$root}style/{$this->templateDir}/{$file}.php");
  63.             }
  64.         }
  65.     }
  66. }

time.php
PHP Code: [ Select ]
class time {
 
    function time()
    {
       
    }
 
    public function format_time($tmsp, $userID)
    {
        // Returning the formatted date/time
        return date('D M j, Y g:i a', $tmsp);
    }
 
}
  1. class time {
  2.  
  3.     function time()
  4.     {
  5.        
  6.     }
  7.  
  8.     public function format_time($tmsp, $userID)
  9.     {
  10.         // Returning the formatted date/time
  11.         return date('D M j, Y g:i a', $tmsp);
  12.     }
  13.  
  14. }

Mon utilisation
PHP Code: [ Select ]
<?=$tpl->time->format_time($column['threadPostDate'], $column['userID']);?>
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13458
  • Loc: Florida
  • Status: Offline

Message Mai 14th, 2011, 8:16 am

Id commencer ici, et essayez de vous rappeler ce que je pensais quand j'ai écrit ceci.

Code: [ Select ]
// Allowing the class to be accessible throughout the design
   $tpl = $this;
  1. // Allowing the class to be accessible throughout the design
  2.    $tpl = $this;
Strong with this one, the sudo is.
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8212
  • Loc: USA
  • Status: Offline

Message Mai 14th, 2011, 9:55 am

Ok :lol: Ma classe de temps ressemble maintenant à:
PHP Code: [ Select ]
<?php
class time {
 
    function time()
    {
        $time = $this;
    }
 
    public function format_time($tmsp, $userID)
    {
        // Returning the formatted date/time
        return date('D M j, Y g:i a', $tmsp);
    }
}
?>
  1. <?php
  2. class time {
  3.  
  4.     function time()
  5.     {
  6.         $time = $this;
  7.     }
  8.  
  9.     public function format_time($tmsp, $userID)
  10.     {
  11.         // Returning the formatted date/time
  12.         return date('D M j, Y g:i a', $tmsp);
  13.     }
  14. }
  15. ?>
Il fonctionne de cette façon :) Merci
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8212
  • Loc: USA
  • Status: Offline

Message Mai 14th, 2011, 10:06 am

Ok, c'est bizarre...après une seconde réflexion, j'ai changé la classe de temps de post précédent:
PHP Code: [ Select ]
<?php
class time {
 
    public function format_time($tmsp, $userID)
    {
        // Returning the formatted date/time
        return date('D M j, Y g:i a', $tmsp);
    }
}
?>
  1. <?php
  2. class time {
  3.  
  4.     public function format_time($tmsp, $userID)
  5.     {
  6.         // Returning the formatted date/time
  7.         return date('D M j, Y g:i a', $tmsp);
  8.     }
  9. }
  10. ?>
(C'est ce que j'ai commencé à l'origine qui a été jeter l'erreur)

et il fonctionne maintenant parfaitement bien...Je n'ai aucune idée de ce à dire...stupide PHP.

J'ai changé tout ramener à ce que j'ai commencé avec et ce n'est pas jeter toutes les erreurs et de travail comme il se doit...J'ai dû changer quelque chose pour que cela fonctionne, mais je ne sais pas ce qu'il est...peut-être le fait que j'ai changé $ tpl-> temps à $ tpl-> date ...Serait-ce fait?
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13458
  • Loc: Florida
  • Status: Offline

Message Mai 14th, 2011, 1:56 pm

Peut-être. Pourrait être une bonne idée de prendre une pause, puis de revenir et de réfléchir à ce que le code fait une fois youve oublié ce que c'est vous faire.
Strong with this one, the sudo is.
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8212
  • Loc: USA
  • Status: Offline

Message Mai 14th, 2011, 2:00 pm

joebert a écrit:
Peut-être. Pourrait être une bonne idée de prendre une pause, puis de revenir et de réfléchir à ce que le code fait une fois youve oublié ce que c'est vous faire.

Cela me rappelle...J'ai déjà eu le temps $ tpl-> réglée sur l'heure (); (La raison pour laquelle je l'ai changé pour $ date tpl->)...la chose étrange est qu'il ne fonctionne toujours pas, après je l'ai changé à $ date tpl-> (je l'ai changé à $ date tpl-> Avant de présenter votre premier post ici). Ensuite, j'ai commencé à changer la classe de temps et après j'ai tout changé, je mets tout en place dans la classe le temps et maintenant il fonctionne.


Je pense que Ill prendre vos conseils et prendre une pause d'elle. Im va commencer reskinning un forum phpbb3 en ce moment :lol: Non PHP donc je considère cela comme une pause.
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Nightslyr
  • Proficient
  • Proficient
  • No Avatar
  • Inscription: Sep 21, 2005
  • Messages: 274
  • Status: Offline

Message Mai 17th, 2011, 1:33 pm

* contraction des yeux au plus "global" des paramètres *

Vous voudrez peut-être se pencher sur l'injection de dépendance pour ce genre de chose.

Afficher de l'information

  • Total des messages de ce sujet: 10 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 159 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC