Up until the yesterday I though that both of these methods for accessing a class where identical. Google turned up noting (either that or my keywords were bad). What is the difference between accessing a class by defining a new instance of the class rather than just calling the class methods directly.
I hardly understood what I just ask, since I have not a clue what I’m asking but allow me to give a few examples to help out.
For as long as I have been using classes in PHP I have been defining a instance of the class then accessing the methods from that variable. Here is an example:
<?php
class Myclass
{
public function my_method() {
return "This is my method";
}
}
$myclass = new Myclass();
echo $myclass->my_method(); // output: This is my method
?>
What is the difference between that and doing this?
<?php
class Myclass
{
public function my_method() {
return "This is my method";
}
}
echo Myclass::my_method(); // output: This is my method
?>
I hope I was clear enough. If not a brief synopsis would be – What is the difference between creating a new instance of a class then calling a method of the class with “$class->mymethod();,” or just directly calling the method like so: “Myclass::mymethod();”?
Thanks in advance.
First, you should understand the difference between a class and an object, or a class and an instance of a class.
For example, where class is “Circle”, an instance might be “this particular circle”. Class Circle might have members $center and $radius – every point has these. But the values of these are different for every point.
$class->mymethod()is a call to an instance method, for instance $circle->Length(). You are saying something to a particular instance of an object. This method will have access to class members – variables that belong to the instance. In PHP you gain access to these instance variables using keyword$this.For instance
$circle->Length()might be implemented asreturn 2*Pi*$this->radius;What happens when you say Circle::Length()? Nothing. This is syntax for calling static methods. Because you did not say which circle. Circle as a class does not have length.
Static method is declared with keyword static. Whatever it does it has no access to any instances of the class. It’s something that a class as a whole does.
For instance, if you want to calculate length of the circle without actually creating one, then there might be
static function calculateLength($radius)in the class circle. And you would call it asCircle::calculateLength($myRadius)In my opinion you should not even think about static methods until you understand the non-static ones.