ID:               12622
 Comment by:       f-shaving32 at hotmail dot com
 Reported By:      jh at synergy dot cx
 Status:           Bogus
 Bug Type:         Class/Object related
 Operating System: linux 2.2
 PHP Version:      4.0.6
 New Comment:

<a href=http://fshaved-upskirt-sha.da.ru>shaving f</a>


Previous Comments:
------------------------------------------------------------------------

[2002-09-14 04:16:28] [EMAIL PROTECTED]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

This is how it is implemented, no bug.

Derick

------------------------------------------------------------------------

[2002-09-13 00:08:48] shamim at poetryunlimited dot com

Further examples - running PHP4.2.2 and NT4/Linux 2.4

Simple example that fails

<?php
error_reporting(E_ALL);
class A
{
  var $a;
  // This should be a static call - the only way it makes sense.
  function example(){echo $this->a;B::Example();}
}

class B extends A
{
  var $b;
  // This should fail when called from objects of type A.
  function example(){echo $this->b;}
}
$a=new A;
$a->example();
?>


Simple example that succeeds when it should not

<?php
error_reporting(E_ALL);
// Example of bug in PHP class method passing $this incorrectly

class test1
{
  var $a;
  function test1(){$this->a=1;}
  function showMe()
  {
    // Since test3::showMe was called as a static method
    // This too should be a static method call with no $this
    echo 'In test1::showMe<hr>';
    echo 'Next 2 lines should fail since this method was not called
from
within this object<br>';
    echo '$this is of type '. get_class($this)." in
test3::showMe<br>\n";
    echo "test1::showMe:a=".$this->a."<br>\n";
  }
  // Class member to test static method call
  function callMe()
  {
    echo 'In test1::callMe<hr>';
    echo '$this is of type '.get_class($this)."in
test1::callMe<hr>\n";
    echo 'Calling class method test3::showMe from an object of type
test1<br>';
    echo '$this should not be passed since test3::showMe does not
exist
in objects of type test1<hr>';
    // This is a static method call, since test1 objects
    // do not have a test3::showMe.
    test3::showMe();
  }
}

class test2 extends test1
{
  function showMe()
  {
    echo 'In test2::showMe<br>';
    echo "Next 2 lines should fail since objects of type test1 cannot
pass \$this<hr>\n";
    echo '$this is of type '. get_class($this)." in
test2::showMe<br>\n";
    echo "test2::showMe:a=".$this->a."<hr>\n";
    echo 'Calling parent::showMe<hr>';
    // Since test3::showMe was called as a static method
    // This too should be a static method call with no $this
    parent::showMe();
  }
}

class test3 extends test2
{
  function showMe()
  {
    echo 'In test3::showMe<br>';
    echo "Next 2 lines should fail since objects of type test1 cannot
pass \$this<hr>\n";
    echo '$this is of type '. get_class($this)." in
test3::showMe<br>\n";
    echo "test3::showMe:a=".$this->a."<hr>\n";
    echo 'Calling parent::showMe<hr>';
    // Since test3::showMe was called as a static method
    // This too should be a static method call with no $this
    parent::showMe();
  }
}

// object $a is of type test1
$a=new test1;
$a->callMe();
?>

------------------------------------------------------------------------

[2001-10-21 20:10:48] [EMAIL PROTECTED]

Reproduced with PHP 4.1.0RC1.

Here is better example script (static is reserverd keyword):

<?php

class blaah
{
    function method()
    {
        echo get_class($this);
    }
}

class Container
{
    function Container()
    {
        blaah::method();
    }
}

$Container = new Container();

?>


------------------------------------------------------------------------

[2001-08-07 11:00:57] jh at synergy dot cx

When calling a static function from within another
class the $this - reference is not empty, but it points
to the class in which you call the static function. To
illustrate:

class Static
{ function method()
  { echo get_class($this);
  }
}

class Container
{ function Container()
  { Static::method();
  }
}

$Container = new Container();

The output is "Container", but there shouldn't be a reference, because
it's not anymore the scope of the
reference.

------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=12622&edit=1

Reply via email to