Can I use a hash sign (#) for commenting in PHP?

PhpComments

Php Problem Overview


I have never, ever, seen a PHP file using hashes (#) for commenting. But today I realized that I actually can! I'm assuming there's a reason why everybody uses // instead though, so here I am.

Is there any reason, aside from personal preference, to use // rather than # for comments?

Php Solutions


Solution 1 - Php

2021 UPDATE: As of PHP 8, the two characters are not the same. The sequence #[ is used for Attributes.(Thanks to i336 for the comment)

Original Answer:

The answer to the question Is there any difference between using "#" and "//" for single-line comments in PHP? is no.

There is no difference. By looking at the parsing part of PHP source code, both "#" and "//" are handled by the same code and therefore have the exact same behavior.

Solution 2 - Php

PHP's documentation describes the different possibilities of comments. See http://www.php.net/manual/en/language.basic-syntax.comments.php

But it does not say anything about differences between "//" and "#". So there should not be a technical difference. PHP uses C syntax, so I think that is the reason why most of the programmers are using the C-style comments '//'.

Solution 3 - Php

<?php
    echo 'This is a test'; // This is a one-line C++ style comment
    /* This is a multi-line comment.
       Yet another line of comment. */
    echo 'This is yet another test.';
    echo 'One Final Test'; # This is a one-line shell-style comment
?>

RTM

Solution 4 - Php

> Is there any reason, aside from personal preference, to use // rather than # for comments?

I think it is just a personal preference only. There is no difference between // and #. I personally use # for one-line comment, // for commenting out code and /** */ for block comment.

<?php
    # This is a one-line comment
    echo 'This is a test';

    // echo 'This is yet another test'; // commenting code
    
    /** 
     * This is a block comment
     * with multi-lines 
     */
    echo 'One final test';
?>

Solution 5 - Php

One might think that the # form of commenting is primarily intended to make a shell script using the familiar "shebang" (#!) notation. In the following script, PHP should ignore the first line because it is also a comment. Example:

#!/usr/bin/php
<?php

echo "Hello PHP\n";

If you store it in an executable file you can then run it from a terminal like this

./hello

The output is

Hello PHP

However, this reasoning is incorrect, as the following counterexample shows:

#!/usr/bin/php
#A
<?php

#B
echo "Hello PHP\n";

The first line (the shebang line) is specially ignored by the interpreter. The comment line before the PHP tag is echoed to standard output because it is not inside a PHP tag. The comment after the opening PHP tag is interpreted as PHP code but it is ignored because it is a comment.

The output of the revised version is

#A
Hello PHP

Solution 6 - Php

If you establish some rule sets in your team / project... the 2 types of comments can be used to outline the purpose of the commented code.

For example I like to use # to mute / disable config settings, sub functions and in general a piece of code that is useful or important, but is just currently disabled.

Solution 7 - Php

There's no official PSR for that.

However, in all PSR example code, they use // for inline comments.

There's an PSR-2 extension proposal that aims to standardize it, but it's not official: https://github.com/php-fig-rectified/fig-rectified-standards/blob/master/PSR-2-R-coding-style-guide-additions.md#commenting-code

// is more commonly used in the PHP culture, but it's fine to use # too. I personally like it, for being shorter and saving bytes. It's personal taste and biased, there's no right answer for it, until, of course, it becomes a standard, which is something we should try to follow as much as possible.

Solution 8 - Php

Yes, however there are cross platform differences.

I use # all the time for commenting in PHP, but I have noticed an adoption difference.

On windows keyboard the # key is easy to use. On mac keyboard # key mostly isn't present.

So for mac users, [Alt] + [3] or [⌥] + [3] is more difficult to type than //, so // has become a cross platform way of displaying code with comments.

This is my observation.

Solution 9 - Php

From https://php.net/manual/en/migration53.deprecated.php

"Deprecated features in PHP 5.3.x ...Comments starting with '#' are now deprecated in .INI files."

There you have it. Hash '#' appears to remain as a comment option by default by not being deprecated. I plan to use it to distinguish various layers of nested if/else statements and mark their closing brackets, or use to distinguish code comments from commented out code as others have suggested in related posts. (Note: Link was valid/working as of 4/23/19, although who knows if it'll still be working when you're reading this.)

Solution 10 - Php

> Is there any reason, aside from personal preference, to use // rather > than # for comments?

I came here for the answer myself, and its good to know there is NO code difference.

However, preference-wise one could argue that you'd prefer the 'shell->perl->php' comment consistency vs the 'c->php' way.

Since I did approach php as a poor man's webby perl, I was using #.. and then I saw someone else's code and came straight to SO. ;)

Solution 11 - Php

OP Question: "Is there any reason, aside from personal preference, to use // rather than # for comments?"

One 2021 Answer, which is certainly not the only answer as we see in this thread:

If you're using Visual Studio Code and using regions to block your code, then you must use # rather than // to define the region. To the question, No, even for this use case : If you are commenting out a region, you can use # or // or /** */, the technique you use for this is personal preference.

Examples for block definition in VSCode :

#region this is a major block
/** DocBlock */
function one() {}
/** DocBlock */
function two() {
  #region nested region based on indentation
  // comments and code in here
      # another nested region based on indentation
        // foo
      #endregion
  #endregion
}
#endregion

On Fold of the inner block:

#region this is a major block
/** DocBlock */
function one() {}
/** DocBlock */
function two() {
>  #region nested region based on indentation
}
#endregion

On Fold of the outer block:

> #region this is a major block

I cite the following specific usage which one might be tempted to try, but these do not work. In fact this is exactly how you DISable a #region block:

// #region
// #endregion
/** #region */
/** #endregion */

As to commenting out a region in VSCode:

/** You can now collapse this block
#region Test1
// foo
#endregion
// everything through to here is collapsed
*/

// #region Test1
// folding is disabled here
// #endregion

# #region Test1
// this also disables the fold
# #endregion

All of that said, "Is there any reason, aside from personal preference, to use // rather than # for comments?" I agree with comments in this thread and in the other thread: // is more commonly recognized and used, which is usually a good reason to use that comment style over #.

Final note, be careful about nesting based on indentation, as code formatting can remove your manual indentation and thus ruin your scheme of nested blocks based on comments. I've tested this with both # and // (which BTW, // nests on indentation too. Again, in context with the OP question, No, there is no reason to use // over # for nested indentation in this context in the current VSCode because both work exactly the same. However, this is a use case for using # over //.

Ref - no extension required, verified in 1.62.3. See notes on indentation there as well.

Solution 12 - Php

Comments with "#" are deprecated with PHP 5.3. So always use // or /.../

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHubroView Question on Stackoverflow
Solution 1 - PhpAzizView Answer on Stackoverflow
Solution 2 - PhpnaitsirchView Answer on Stackoverflow
Solution 3 - PhpajrealView Answer on Stackoverflow
Solution 4 - PhpSithuView Answer on Stackoverflow
Solution 5 - PhpBrandinView Answer on Stackoverflow
Solution 6 - Phpd.raevView Answer on Stackoverflow
Solution 7 - PhpLucas BustamanteView Answer on Stackoverflow
Solution 8 - PhpMark N HopgoodView Answer on Stackoverflow
Solution 9 - PhpBarbaraRoseNowView Answer on Stackoverflow
Solution 10 - PhpGerard ONeillView Answer on Stackoverflow
Solution 11 - PhpTonyGView Answer on Stackoverflow
Solution 12 - PhpAndreView Answer on Stackoverflow