NYCPHP Meetup

NYPHP.org

[nycphp-talk] OOP Error/Question

Rob Marscher rmarscher at beaffinitive.com
Fri Jul 27 11:43:03 EDT 2007


Anywhere you call something statically -- i.e. with :: -- you can't  
use $this

On Jul 27, 2007, at 10:51 AM, Ben Sgro ((ProjectSkyLine)) wrote:

> 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
> _______________________________________________
> 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



------------------
Rob Marscher
Software Engineer
rmarscher at beaffinitive.com
212.684.9100x17


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.nyphp.org/pipermail/talk/attachments/20070727/fdd05b93/attachment.html>


More information about the talk mailing list