|
Sometimes it is useful to refer to functions and
variables in base classes or to refer to functions in classes
that have not yet any instances. The :: operator is being
used for this.
class A { function example() { echo "I am the original function A::example(). br \n"; } } class B extends A { function example() { echo "I am the redefined function B::example(). br \n"; A::example(); } } // there is no object of class A. // this will print // I am the original function A::example(). br A::example(); // create an object of class B. $b = new B; // this will print // I am the redefined function B::example(). br // I am the original function A::example(). br $b- example(); |
The above example calls the function example() in class
A, but there is no object of class A, so that we cannot write
$a- example() or similar. Instead we call example() as a
'class function', that is, as a function of the class itself,
not any object of that class.
There are class functions, but there are no class
variables. In fact, there is no object at all at the time of
the call. Thus, a class function may not use any object
variables (but it can use local and global variables), and it
may no use $this at all.
In the above example, class B redefines the function
example(). The original definition in class A is shadowed and
no longer available, unless you are refering specifically to
the implementation of example() in class A using the
::-operator. Write A::example() to do this (in fact, you
should be writing parent::example(), as shown in the next
section).
In this context, there is a current object and it may
have object variables. Thus, when used from WITHIN an object
function, you may use $this and object variables.