NYCPHP Meetup

NYPHP.org

[nycphp-talk] OOP Error/Question

Ben Sgro (ProjectSkyLine) ben at projectskyline.com
Fri Jul 27 10:51:56 EDT 2007


Hello Andy, 

I tried your 1st, quicker method, I get:

PHP Fatal error:  Access to undeclared static property:  Error::$builtMessage in /var/www/html/sk/OOPLIB/ERRO.php on line 81
        self::$builtMessage = $errorStr;

builtMessage is declared as:
        $this->builtMessage = '';
in the class.

I am still learning OOP and had just started it when I wrote this code ...
So, I may need to rework it, but I'd prefer to not do that right now.

- Ben

Ben Sgro, Chief Engineer
ProjectSkyLine - Defining New Horizons
+1 718.487.9368 (N.Y. Office)

Our company: www.projectskyline.com
Our products: www.project-contact.com

This e-mail is confidential information intended only for the use of the individual to whom it is addressed.
  ----- Original Message ----- 
  From: Andy Dirnberger 
  To: 'NYPHP Talk' 
  Sent: Friday, July 27, 2007 10:43 AM
  Subject: RE: [nycphp-talk] OOP Error/Question


  Try self::$builtMessage = $errorStr;

   

  Or another option is to adopt the singleton pattern.  This will give you the same instance of the Error object anywhere you try to use it in your code.

   

  Something like:

   

  class Error {

    private function __constrct () {

    }

   

    public function GetInstance () {

      If (self::$instance == null) self::$instance = new self;

      Return self::$instance;

    }

   

    public function Backtrace () {

      // code from below

    }

   

    private $builtMessage;

    private static $instance = null;

  }

   

  And in your code:

   

  $err = Error::GetInstance ();

  $err->Backtrace ();

   


------------------------------------------------------------------------------

  From: talk-bounces at lists.nyphp.org [mailto:talk-bounces at lists.nyphp.org] On Behalf Of Ben Sgro (ProjectSkyLine)
  Sent: Friday, July 27, 2007 10:29 AM
  To: NYPHP Talk
  Subject: Re: [nycphp-talk] OOP Error/Question

   

  Hello, 

   

  Thanks, both your fixes fixed this issue.

   

  However, it broke it in another place.

   

  PHP Fatal error:  Using $this when not in object context in /var/www/html/sk/OOPLIB/ERRO.php on line 80

  Inside the Backtrace( ) function I have:

          $this->builtMessage = $errorStr;

   

  To save the message to a string within the object. I can't do self::builtMessage = $errorStr,

  so what can I do?

   

  Here's the backtrace function:

   

      static function Backtrace( )
      {
          $btSet  = debug_backtrace( );
          $iValue = 1; /* [0] is the traceback for the Error:: *///sizeof($btSet) - 1;
          $eSet   = $btSet[$iValue];
          
          $errorStr = "\ndate: " . date('r')
                    . "\nfile: " . $eSet['file']
                    . "\nline: " . $eSet['line']
                    . "\nfunction: " . @$eSet['class'] . '::' . $eSet['function']
                    . "\nargs: ";

   

          /* Build a list of the functions arguments. */
          while(list($argIndex, $argStr) = each($eSet['args']))
          {
              $errorStr .= "[${argIndex}]$argStr ";
          }
          $this->builtMessage = $errorStr;
      }

   

  Which is called from another function:

              case LOG_LEVEL_ALERT:
                  self::Backtrace( );

   

  - Ben

   

   

  Ben Sgro, Chief Engineer
  ProjectSkyLine - Defining New Horizons

  ----- Original Message ----- 

    From: drydell at optonline.net 

    To: NYPHP Talk 

    Sent: Friday, July 27, 2007 10:17 AM

    Subject: Re: [nycphp-talk] OOP Error/Question

     

    you're calling Error statically, so there can't be any object instance references... instead of $this->Backtrace(), use self::Backtrace();

    ----- Original Message -----
    From: "Ben Sgro (ProjectSkyLine)" 
    Date: Friday, July 27, 2007 10:10 am
    Subject: [nycphp-talk] OOP Error/Question
    To: NYPHP Talk 

    > Good morning, 
    > 
    > So, I have a script where I'm calling:
    > 
    > function ReceivePOPEmail($popObject)
    > {
    > $error = $popObject->Login($popObject-
    > >username,$popObject->password,
    > $popObject->apop);
    > if ( $error != '' )
    > {
    > /* We've had an error. */
    > Error::Log("Error: " . HtmlSpecialChars($error), 
    > LOG_LEVEL_ALERT); return PROC_FAILURE;
    > }
    > return PROC_SUCCESS;
    > }
    > 
    > that's function ... I don't want to pass the Error Object 
    > around, so I just want to call it via:
    > Error:Log(.....);
    > 
    > Now, inside the Error class, there is this code:
    > case LOG_LEVEL_ALERT:
    > $this->Backtrace( );
    > 
    > Which is getting executed. But I'm getting the error:
    > 
    > PHP Fatal error: Using $this when not in object context in 
    > /var/www/html/sk/OOPLIB/ERRO.php on line 101
    > 
    > So, how do I call that class's method w/out passing the object around?
    > 
    > - Ben
    > 
    > 
    > Ben Sgro, Chief Engineer
    > ProjectSkyLine - Defining New Horizons
    > 
    > This e-mail is confidential information intended only for the 
    > use of the individual to whom it is addressed.
    > 


----------------------------------------------------------------------------

    _______________________________________________
    New York PHP Community Talk Mailing List
    http://lists.nyphp.org/mailman/listinfo/talk

    NYPHPCon 2006 Presentations Online
    http://www.nyphpcon.com

    Show Your Participation in New York PHP
    http://www.nyphp.org/show_participation.php



------------------------------------------------------------------------------


  _______________________________________________
  New York PHP Community Talk Mailing List
  http://lists.nyphp.org/mailman/listinfo/talk

  NYPHPCon 2006 Presentations Online
  http://www.nyphpcon.com

  Show Your Participation in New York PHP
  http://www.nyphp.org/show_participation.php
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.nyphp.org/pipermail/talk/attachments/20070727/0ac411cf/attachment.html>


More information about the talk mailing list