Solved

What is "protected static?"

Posted on 2016-07-18
7
43 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
zephyr_hex earned 350 total points
Comment Utility
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
Comment Utility
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
Comment Utility
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
Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

 
LVL 42

Assisted Solution

by:zephyr_hex
zephyr_hex earned 350 total points
Comment Utility
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
Comment Utility
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 earned 350 total points
Comment Utility
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 108

Assisted Solution

by:Ray Paseur
Ray Paseur earned 150 total points
Comment Utility
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

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

Popularity Can Be Measured Sometimes we deal with questions of popularity, and we need a way to collect opinions from our clients.  This article shows a simple teaching example of how we might elect a favorite color by letting our clients vote for …
Both Easy and Powerful How easy is PHP? http://lmgtfy.com?q=how+easy+is+php (http://lmgtfy.com?q=how+easy+is+php)  Very easy.  It has been described as "a programming language even my grandmother can use." How powerful is PHP?  http://en.wikiped…
The viewer will learn how to dynamically set the form action using jQuery.
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.

762 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

Need Help in Real-Time?

Connect with top rated Experts

7 Experts available now in Live!

Get 1:1 Help Now