Re: Class not functioning

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Wouter,

Implementing your static idea was pretty easy, I was already referencing
Notifier with the :: operator in my other methods, however I am running into
trouble assigning new values to the static array.

I am getting a "syntax error, unexpected '[' " on this line of my Notifier
class:

Notifier::notifyQ[] = '<div class="'.$message;

. . .

Any ideas why this is causing an error?
(note: I did try using $this->Notifier, and it said I cannot do what-not to
a non-object, can't remember the exact message at the moment)

On Tue, Dec 15, 2009 at 2:30 PM, Wouter van Vliet / Interpotential <
public@xxxxxxxxxxxxxxxxxx> wrote:

> Allen,
>
> The short answer (but don't follow this):
> <?php
> class Meetgreet {
>   public function deleteSingle($id, $number) {
>       // do something
>       global $Notify;
>       $Notify->addToQ( .. );
>   }
> }
> ?>
>
> The long(er) answer:
> I assume your Notifier object functions as singleton? Ie; accross your
> entire application, there is only one instance of that class?
>
> Why not go-static? That is, to my experience, the sweetest way to make
> something globally accessible - without making something global. Like so
>
> <?php
> class Notifier {
>
>    protected static $queue = Array();
>
>    // make sure it can't be instantiated
>    private constructer __construct() {
>    }
>
>    public static function addToQ( $arg, $anotherArg) {
>        self::$queue[] = $arg.' - '.$anotherArg;
>    }
>
> }
>
> // and then from within any method anywhere, call
> Notifier::addToQ('foo', 'bar');
>
> ?>
>
> Does that work for you?
>
> Regards,
> Wouter
>
> (ps. call me a purist, but a function defined in a class is no longer
> called a function, but a *method*)
>
> 2009/12/15 Allen McCabe <allenmccabe@xxxxxxxxx>
>
>>  Hey all (and Nirmalya, thanks for the help!),
>>
>>
>> I have a question that I just can't seem to find via Google.
>>
>> I want to be able to add messages to a qeue whenever my classes complete
>> (or
>> fail to complete) specific functions. I think have a call within my html
>> to
>> my Notifier class to print all qeued messages (via a function 'printQ').
>>
>> How do I access a globally instantiated class from within another class?
>>
>> Example:
>>
>> <?php
>>
>> // INSTANTIATE
>> $Meetgreet = new Meetgreet;
>> $Notify = new Notifier;
>>
>> ...
>> ...
>>
>> $Meetgreet->deleteSingle($id, 1); // This completes a function within
>> Meetgreet class. That function needs to be able to use the Notifier
>> function
>> addtoQ(), how would this be accomplished?
>>
>> ?>
>> ...
>> ...
>>
>> <?php  $Notify->printQ()  ?>
>>
>> On Mon, Dec 14, 2009 at 6:07 PM, Nirmalya Lahiri
>> <nirmalyalahiri@xxxxxxxxx>wrote:
>>
>> > --- On Tue, 12/15/09, Allen McCabe <allenmccabe@xxxxxxxxx> wrote:
>> >
>> > > From: Allen McCabe <allenmccabe@xxxxxxxxx>
>> > > Subject:  Class not functioning
>> > > To: "phpList" <php-general@xxxxxxxxxxxxx>
>> > > Date: Tuesday, December 15, 2009, 6:17 AM
>> >  > Hey everyone, I just delved into
>> > > classes recently and have been having
>> > > moderate success so far.
>> > >
>> > > I have a puzzler though.
>> > >
>> > > I have the following class decalred and instantiated:
>> > >
>> > > class Notify {
>> > >  var $q = array();
>> > >
>> > >  public function addtoQ($string, $class)
>> > >  {
>> > >   $message = '<span class="'. $class .'">'.
>> > > $string .'</span>';
>> > >   $this->q[] = $message;
>> > >  }
>> > >
>> > >  public function printQ()
>> > >  {
>> > >   if (isset($q))
>> > >   {
>> > >    echo '<p align="center"
>> > > class="notification">';
>> > >    foreach($this->q as $msg)
>> > >    {
>> > >     echo $msg ."\n";
>> > >    }
>> > >    echo '</p>';
>> > >   }
>> > >
>> > >   return;
>> > >  }
>> > >
>> > >  function __destruct()
>> > >  {
>> > >   if (isset($q))
>> > >   {
>> > >    unset($this->q);
>> > >   }
>> > >  }
>> > > } // END CLASS Notify
>> > >
>> > >
>> > > And in my script, I call it like so:
>> > > $Notif = new Notify;
>> > >
>> > > I have run other statements in other classes that should be
>> > > adding to the $q
>> > > array (ie. Notify::addtoQ('ERROR! There Was An Error
>> > > Updating The
>> > > Database!', 'error');)
>> > >
>> > > However, when I try to get my webpage to display them
>> > > using:
>> > >
>> > > $Notify->printQ();
>> > >
>> > > it does not seem to want to loop through this array (and
>> > > print the
>> > > messages). I am getting NO error message, in fact
>> > > everything 'looks' fine,
>> > > I'm just not seeing the appropriate message.
>> > >
>> > > Any help would be appreicated!
>> > >
>> >
>> > Allen,
>> >  You have made a small typing mistake in function printQ() where you
>> would
>> > like to checked the array for its existence. By mistake you have wrote
>> "if
>> > (isset($q))". But your array variable is not an freely accessible
>> array,the
>> > array is embedded into an object. So, you have to write the like "if
>> > (isset($this->q))".
>> >
>> >  Another point, you can't add a message into the array by calling the
>> > member function addtoQ() using scope resolution operator "::". If you
>> really
>> > want to add message into the array, you have to call the member function
>> > from within the object. (ie. $Notif->addtoQ('ERROR! There Was An Error
>> > Updating The Database!', 'error');).
>> >
>> > ---
>> > নির্মাল্য লাহিড়ী [Nirmalya Lahiri]
>> > +৯১-৯৪৩৩১১৩৫৩৬ [+91-9433113536]
>> >
>> >
>> >
>> >
>> >
>>
>
>
>
> --
> http://www.interpotential.com
> http://www.ilikealot.com
>
> Phone: +4520371433
>

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux