Skip to main content

Unable to get Static declaration behaviour in PHP





class StaticTester

{

private static $id=0;

function__construct()

{

self::$id+=1;

}

public static function checkIdFromStaticMethod()

{

echo "Current Id from Static method is ".self::$id;

}





}



$st1=new StaticTester();

StaticTester::checkIdFromStaticMethod(); // this outputs 1.







Okay ,I am not getting why the output is 1? After all Static means the value cannot be changed !


Comments

  1. No, static means without instance, you are probable looking for constants.

    ReplyDelete
  2. function__construct()
    {
    self::id+=1;
    }


    should be

    function__construct()
    {
    self::$id+=1;
    }


    missed a dollar sign there :)

    oops.... misread the question. i thought you had an error in your code hehe. which you did, but probably just a copy/paste error.

    it becomes one since it's incremented by one each time a new object is created. and all the objects share the same id variable. this is what static means.

    a number that can never change is called a constant, and declared with the keyword const in php.

    ReplyDelete
  3. static does not mean the value cannot be changed at all! You want const, or final (which PHP does not have). static will actually retain the value between method calls (since it's a member, it would anyway).

    ReplyDelete
  4. Static does not mean that the value cannot be changed, it means that the value is held at the class level and not at the instance level. Other languages (such as Java) sometimes refer to this as a "class variable".

    I think you are getting confused between static and final or const.

    Manual refs:


    static keyword
    final keyword
    Class constants

    ReplyDelete
  5. static means : for all possible instances, the same variable will be used

    function__construct()
    {
    self::$id+=1;
    }

    $st1=new StaticTester();


    when doing the new , __construct is called , so your $id static variable will be used & increased.
    may you do $st2=new StaticTester() , StaticTester::checkIdFromStaticMethod() will return 2 !!!
    That's what your code is meant to do as it is written.

    Agree with "constant" answers.

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.