Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Private static method vs. static method

Tags:

php

I understand that static means that an object doesn't need to be instantiated for that property/method to be available. I also understand how this applies to private properties and methods and public methods. What I'm trying to understand is what static private function gains you. For example:

class Beer {     static private $beertype = "IPA";      private function getBeerType() {             return self::$beertype;     }      static public function BeerInfo() {             return self::getBeerType();     } }  print Beer::BeerInfo() . "\n"; 

The private method getBeerType() executes just fine without an instantiated object as long as it's being called from a static public method. If a static public method has access to all private methods (static and non-static), what's the benefit of declaring a method static private?

With strict error reporting turned on, I do get the warning that I should make getBeerType() static, although it still lets me run the code. And I did a little research and it seems like other languages (Java) will force you to declare a private method as static when called by a static public method. Looks like PHP lets you get away with this. Is there a way to force it to throw an error and not execute?

like image 674
MacGruber Avatar asked Jul 16 '12 00:07

MacGruber


People also ask

Can a static method be private?

Yes, we can have private methods or private static methods in an interface in Java 9.

What is the difference between static and private?

A private variable is only accessible inside the class. A static variable belongs to the class rather than to an instance of a class. Notice that the variable DEPARTMENT is also final , which means that it cannot be modified once it is set.

What are public/private and static methods?

So it goes into a private static method that the non-private factory methods call. Visibility (private versus public) is different from class method (i.e. static) versus instance method (non-static). A private static method can be called from a public method - static or not - but not from outside the class.

What is the use of private static methods in C#?

A private constructor prevents the class from being instantiated. The advantage of using a static class is that the compiler can check to make sure that no instance members are accidentally added. The compiler will guarantee that instances of this class cannot be created.


2 Answers

A static private method provides a way to hide static code from outside the class. This can be useful if several different methods (static or not) need to use it, i.e. code-reuse.

Static methods and static variables, sometimes called class methods and class variables, are a way of putting code and data into a kind of namespace. You could also think of class variables as variables attached to the class itself, of which there is (by definition) exactly one, instead of to instances of that class, of which there may be zero, one or many. Class methods and class variables can be useful in working with attributes that not just remain same in all instances, but actually be the same.

An example of a class variable is a database handler in an ORM entity object. All instances are their own object, but they all need access to the same database handler for loading and saving themselves.

Private versus public is a completely separate quality, which is I suspect what you're stumbling over. A private method cannot be called and private variables cannot be accessed from code outside the class. Private methods are usually used to implement "internal" logic on the object that must not be accessible from outside the object. This restriction can be needed by instance methods as well as class methods.

An example of a private class method could be in a factory method. There might be three factory calls for creating an object which might differ in parameters being supplied. Yet the bulk of the operation is the same. So it goes into a private static method that the non-private factory methods call.

like image 169
staticsan Avatar answered Oct 02 '22 19:10

staticsan


I understand static means that an object doesn't need to be instantiated for that property/method to be available.

Everything static just exists. Globally.

I also understand how this applies to public properties and methods and public methods

Are you sure you have understood that it creates a global variable and a standard global function?

What I'm trying to understand is what static private function gains you.

The private is just a specifier of visibilityDocs. So that gains you visibility control.

Is it useful? Depends on the use-case.

like image 31
hakre Avatar answered Oct 02 '22 18:10

hakre