9

What does it mean when a PHP function name begins with an underscore?

for example: __construct()

I know what the construct means but I've seen other places where the function begins with an underscore, or a double underscore and I'm just not sure of the significance.

0

5 Answers 5

21

It means that PHP calls it implicitly.

It's called a 'Magic Method'

Also, it's two underscores, not one.

Learn more here: PHP Magic Methods

Sign up to request clarification or add additional context in comments.

5 Comments

Ah. Magic in PHP. Whatever next?
I hate hate hate that they chose the term "magic" for this convention. It sounds so childish/idiotic. Why not just call them "hooks"?
@Amarghosh Who is everybody? Personally I like it and I know tons of people who like it.
@Peter Bailey: see catb.org/jargon/html/M/magic.html for a bit of explanation
@Amarghosh Do you mean everybody hate wordpress, everybody hate magento, everybody hate drupal, codeinginator, cakephp etc. Go out of you room lol i think everybody hate you... (^_~)
5

In PHP, functions start with two underscores usually have special meanings. From the manual:

PHP reserves all function names starting with __ as magical. It is recommended that you do not use function names with __ in PHP unless you want some documented magic functionality.

For example __construct() is a special method which is called automatically while initializing an object.

Se also: http://php.net/manual/en/language.oop5.magic.php

Comments

4

There's also a common naming "coding style" which uses one initial underscore to indicate methods or properties are private/protected. I think it's pretty widespread.

1 Comment

Yes, I have used this in C#
1

As noted in other answers, the double underscore is used for "magic" methods. The idea is that the user would never intentionally use two underscores for a method name, so there is little risk of collision. The reason it isn't a single underscore, I believe, is that the single underscore was a popular convention for private methods in the bad(der) old days, before the 'private' keyword came along to enforce OO privateness.

Comments

0

In codeigniter, if you start a method in a controller with an underscore, the router will know not to allow it to be accessed from the url.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.