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: [nyphp-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: [EMAIL PROTECTED] [mailto:talk- [EMAIL PROTECTED] On Behalf Of Ben Sgro (ProjectSkyLine)
Sent: Friday, July 27, 2007 10:29 AM
To: NYPHP Talk
Subject: Re: [nyphp-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: [EMAIL PROTECTED]

To: NYPHP Talk

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

Subject: Re: [nyphp-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: [nyphp-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
[EMAIL PROTECTED]
212.684.9100x17


_______________________________________________
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

Reply via email to