Differences and similarities between New Static () and new self () in PHP _php tips

Source: Internet
Author: User

This article illustrates the difference between the new static () and the New self () in PHP, and believes that it will help you to learn the PHP program.

The cause of the problem is to build a local station. Found in PHP 5.2 can not build up, the station PHP code inside there are many more than 5.3 parts, requirements change in 5.2 to run.

Instead of finding a place,

return new static ($val);

This is a god horse, I saw

return new self ($val);

So the internet looked up the difference between the two of them.

Self-This is the class, which is the class within the code snippet.

Static-php 5.3 Added to the current class, a bit like the meaning of $this, extracted from the heap memory, access to the current instantiation of the class, then static represents that class.

Or look at the foreigner's professional explanation:

Self refers to the same class whose method the new operation takes place in.

Static in PHP 5.3 's late static bindings refers to whatever class in the hierarchy of the call the "method" on.

In the following example, B inherits both methods from a. Self are bound to a because it's defined in a ' s implementation of The the whereas static is bound to the called Class (also and the Get_called_class ()).

Class A {public
  static function get_self () {return
    new self ();
  }

  public static function Get_static () {return
    new static ();
  }
}

Class B extends a {}

echo Get_class (B::get_self ());//A
echo get_class (B::get_static ());//b
echo Get_cla SS (A::get_static ()); A

This example is basically a look at it.

Principle to understand, but the problem has not been resolved, how to solve the return of the new Static ($val); What about the problem?

In fact, it is simple to use Get_class ($this); The code is as follows:

Class A {public
  function create1 () {
    $class = Get_class ($this);
return new $class ();
  }
  Public Function Create2 () {return
    new static ();
  }
}

Class B extends A {

}

$b = new B ();
Var_dump (Get_class ($b->create1 ()), Get_class ($b->create2 ()));

/* The result 
string (1) "B"
string (1) "B"
* *

Interested friends can test the sample code, I believe there will be a new harvest!

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.