FUDforum
Fast Uncompromising Discussions. FUDforum will get your users talking.

Home » Imported messages » comp.lang.php » Globalizing vars in class methods doesnt seem to work, var disappears after global, var is inaccessible in other methods/funcs
Show: Today's Messages :: Polls :: Message Navigator
Return to the default flat view Create a new topic Submit Reply
Re: Globalizing vars in class methods doesnt seem to work, var disappears after global, var is inaccessible in other methods/funcs [message #178795 is a reply to message #178794] Sun, 05 August 2012 04:08 Go to previous messageGo to previous message
J. Frank Parnell is currently offline  J. Frank Parnell
Messages: 12
Registered: January 2012
Karma:
Junior Member
On Saturday, August 4, 2012 11:45:35 AM UTC-7, Jerry Stuckle wrote:
> On 8/4/2012 2:24 PM, Jerry Stuckle wrote:
>
>> On 8/3/2012 1:45 PM, J. Frank Parnell wrote:
>
>>> <?php
>
>>> class test{
>
>>> function __construct(){
>
>>> $this->makevar();
>
>>> global $var;
>
>>> echo '<hr>__const(): '.$var;
>
>>> }
>
>>> function makevar(){
>
>>> $var = 'something';
>
>>> echo '<hr>just declared in makevar(): '.$var;
>
>>> global $var;
>
>>> echo '<hr>after global in makevar(): '.$var;
>
>>> }
>
>>> }//class
>
>>>
>
>>> $t = new test;
>
>>> echo '<hr>outside class: '.$var;
>
>>> global $var;
>
>>> echo '<hr>outside class after global: '.$var;
>
>>>
>
>>> ?>
>
>>> this outputs:
>
>>> just declared in makevar(): something
>
>>> after global in makevar(): [nothing]
>
>>> __const():[nothing]
>
>>> outside class: [nothing]
>
>>> outside class after global: [nothing]
>
>>>
>
>>>
>
>>> So, 1, why does global $var in the makevar() make it null?
>
>>> and B, why dont I have any access to $var in the __constructor or
>
>>> outside the class?
>
>>>
>
>>> In the real script, $var will be an instance of a different class that
>
>>> I want to use all over the place.
>
>>> thanks, J
>
>>>
>
>>
>
>> And what if you have:
>
>>
>
>> $t1 = new test;
>
>> $t2 = new test;
>
>>
>
>> Which variable are you supposed to be referencing (they are two
>
>> different variables)?
>
>>
>
>> But what you're doing violates several concepts in OO programming,
>
>> including encapsulation and message passing. The correct way to do it
>
>> is to pass an object of the class as a parameter (i.e. to the
>
>> constructor) then use getters and setters to reference the variable.
>
>> Proper coding makes your code more reliable, maintainable, reusable and
>
>> easier to understand.
>
>>
>
>
>
> An addition option I forgot to mention - you could also use the
>
> singleton pattern as M. Strobel referenced. However, if you do, you
>
> should always have a default parameter in the call so you can use
>
> something other than the singleton when you need to.

Ok, I read a little on the singleton, that does seem like a good way of doing it. What I wound up doing, before you guys replied, was just $this->var = 'something' and then doing $t->var where I needed that 'something'. Which I think make sense for OO? Because it is somewhat logical for 'something' to be part of my class, in my situation. Although 'something' is a different object, eg, an api class. My class is a child class of a controller in an MVCish framework.

I just found out that this works
class test{
function __construct(){
$this->makevar();
}
function makevar(){
global $var;
$var = 'something';// actually, $var = new something();
}
}//class

$t = new test;
echo '<hr>outside class: '.$var;//works And I assume would work in a unrelated function if I globalled it in there.

> always have a default parameter in the call so you can use
> something other than the singleton when you need to

not sure what this means
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: str_replace, replace array with string AND array
Next Topic: Excellent new opportunity for developers to monetize more with their Apps.
Goto Forum:
  

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ]

Current Time: Fri Sep 20 13:44:19 GMT 2024

Total time taken to generate the page: 0.04682 seconds