Solved

What is "protected static?"

Posted on 2016-07-18
7
48 Views
Last Modified: 2016-07-20
If I were to explain what a property was in OOP and then go on to explain a constructor, I would ask my audience to envision a spreadsheet. A property is like a column. It's just a digital placeholder. A constructor assigns a value to that column.

"Visibility" is all about how accessible those properties in the context of your app. Public means that it's available throughout your entire online community. "Protected" means that it's only available within the Class that it was instantiated along with any Classes it might be associated with (parent / child). "Private" means that it's only available within the Class it was created in.

"Protected Static." I get the "protected" part and I've attempted to google "static," but I'm still a little fuzzy.

From what I can gather, making a Property "static" eliminates the need for it to be instantiated using the $this (pseudo variable which means "this current object"). Frankly, I've never used that, but I want to understand it. Here's the code I'm attempting to deconstruct:

class StatementImage {

    protected $statementid;
    protected $pipe_delim;
    protected $statement_data;
    protected static $debug = false;

    /**
     * Takes the pipe delimited file and creates a statementimage entity.
     */
    public function __construct($pipe_delim) {

        $this->pipe_delim = $pipe_delim;
        $this->statement_data = StatementImage::pipeToArray($pipe_delim);
        $this->statementid = str_replace('T', '', $this->statement_data['statement']['statement_pin']);

    }

Open in new window


What is $debug=false? It's not referenced anywhere else on the page and I cannot figure out it's purpose or why it would be assigned a "protected static" dynamic.

Please raise your hand if you know the answer :)...
0
Comment
Question by:brucegust
  • 4
  • 2
7 Comments
 
LVL 42

Assisted Solution

by:zephyr_hex (Megan)
zephyr_hex (Megan) earned 350 total points
ID: 41717466
Static properties are not associated with a particular instance.  In other words, all StatementImages will have $debug = false, while StatementImage A could have a different $statementid than StatementImage B.
0
 
LVL 42

Expert Comment

by:zephyr_hex (Megan)
ID: 41717467
And you're correct, $debug is not being referred to in the code you posted.  Perhaps it's referenced somewhere else?   Or maybe it was created for debugging but the related code has been removed ?
0
 

Author Comment

by:brucegust
ID: 41717508
I get it...

So, anytime you include a static property within a class, every function within that class will AUTOMATICALLY have that property attached to it.

So, in this instance, instead of having to repeatedly assign a "false" value to the $debug property (although we don't know where that puppy is right now), because it's "static," it's present throughout by default, yes?

Thanks!
0
Problems using Powershell and Active Directory?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

 
LVL 42

Assisted Solution

by:zephyr_hex (Megan)
zephyr_hex (Megan) earned 350 total points
ID: 41717525
Correct.  Sort of.  You could have a dynamic / non-static property that's assigned a value in the constructor.  So you would have the same value for the property across all instances of the class when they are first instantiated, and you wouldn't have to "assign" the value to the property because it's handled in the constructor.

Perhaps this will help clarify the difference.  Consider the implications of the following aspect of static properties:  there is only one copy of a static property and it's shared among all instances of the class.  You can change it... but it changes for all instances.
0
 

Author Comment

by:brucegust
ID: 41717545
You're right! I get what you're saying about the dynamic, non-static property scenario in the constructor - that would work. So, conceivably there are two different ways in which the guy who originally wrote this code could've done what he was striving to accomplish with the "protected static $debug=false" code.

He could've used:

protected static $debug=false

OR

He could've done something like:

protected $debug

public function __construct {

$this->debug=false;

}

Yeah?
0
 
LVL 42

Accepted Solution

by:
zephyr_hex (Megan) earned 350 total points
ID: 41717653
If that approached were used, each instance of StatementImage would have its "own" debug property.  That means if you instantiated a new instance, debug would be false, you could change it to true in that instance, but all of the other StatementImage objects would have debug = false.

But yes, you can set the value in the constructor like that, and then that property is assigned a value when the instance is instantiated.
0
 
LVL 109

Assisted Solution

by:Ray Paseur
Ray Paseur earned 150 total points
ID: 41717945
When I think of static properties and methods, I think that "static" is an overloaded term.
http://php.net/manual/en/language.oop5.static.php

In addition to late static bindings, you can get access to static properties and methods without creating an object instance from the class.  Thus the class method can act as a "helper function" for other programming.  In the case of a protected static method. the class method can act as a helper function for this class and extensions of class, but it cannot refer to $this, nor can it be a helper function for programming that is outside the inheritance chain.
0

Featured Post

Are your AD admin tools letting you down?

Managing Active Directory can get complicated.  Often, the native tools for managing AD are just not up to the task.  The largest Active Directory installations in the world have relied on one tool to manage their day-to-day administration tasks: Hyena. Start your trial today.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Generating table dynamically is the most common issue faced by php developers.... So it seems there is a need of an article that explains the basic concept of generating tables dynamically. It just requires a basic knowledge of html and little maths…
Things That Drive Us Nuts Have you noticed the use of the reCaptcha feature at EE and other web sites?  It wants you to read and retype something that looks like this.Insanity!  It's not EE's fault - that's just the way reCaptcha works.  But it is …
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

809 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question