PHP: クラス/オブジェクト関数 - Manual
PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<classkit_method_renamecall_user_method_array>
view the version of this page
Last updated: Tue, 21 Dec 2004

XI. クラス/オブジェクト関数

導入

以下の関数により、クラスやインスタンスオブジェクトに関する情報を 得ることが可能となります。オブジェクトが属するクラスの名前、その メンバープロパティ、メソッドを取得可能です。 この関数を使用することにより、オブジェクトのクラスメンバーだけで なく親クラス(すなわちそのオブジェクトクラスの派生元)の情報を得る ことも可能です。

要件

これらの関数は、標準モジュールの一部として利用可能であり、常に使用できます。

インストール手順

これらの関数はPHPコアに含まれるため、使用す る際にインストールは不要です。

実行用の設定

この拡張モジュールは設定ディレクティブを全く定義しません。

リソース型

この拡張モジュールはリソース型を全く定義しません。

定義済みの定数

この拡張モジュールは定数を全く定義しません。

この例では、まず基底クラスおよびそのクラスの派生クラスを定義しま す。基底クラスは食用か否か、色とかいった、一般的な野菜を記述しま す。サブクラスSpinachはその野菜の料理法と調理 済であるかどうかの情報を追加します。

例 1. classes.inc

<?php

// メンバープロパティとメソッドを有する基底クラス
class Vegetable {

   var
$edible;
   var
$color;

   function
Vegetable( $edible, $color="green" ) {
      
$this->edible = $edible;
      
$this->color = $color;
   }

   function
is_edible() {
       return
$this->edible;
   }

   function
what_color() {
       return
$this->color;
   }
  
}
// クラスVegetableの終り

// 基底クラスを拡張する
class Spinach extends Vegetable {

   var
$cooked = false;

   function
Spinach() {
      
$this->Vegetable( true, "green" );
   }

   function
cook_it() {
      
$this->cooked = true;
   }

   function
is_cooked() {
       return
$this-&gt;cooked;
   }
  
}
// クラスSpinachの終り

?>

続いて、これらのクラスから二つのオブジェクトのインスタンスを作成し、 親クラスを含む情報を出力します。 また、いくつかのユーティリティ関数を定義します。これらは主に変数 を格好良く表示するためのものです。

例 2. test_script.php

<pre>
<?php

include "classes.inc";

// ユーティリティ関数

function print_vars($obj) {
  
$arr = get_object_vars($obj);
   while (list(
$prop, $val) = each($arr))
       echo
"\t$prop = $val\n";
}

function
print_methods($obj) {
  
$arr = get_class_methods(get_class($obj));
   foreach (
$arr as $method)
       echo
"\tfunction $method()\n";
}

function
class_parentage($obj, $class) {
   global $
$obj;
   if (
is_subclass_of($$obj, $class)) {
       echo
"Object $obj belongs to class ".get_class($$obj);
       echo
" a subclass of $class\n";
   } else {
       echo
"Object $obj does not belong to a subclass of $class\n";
   }
}

// 二つのオブジェクトのインスタンスを作成

$veggie = new Vegetable(true,"blue");
$leafy = new Spinach();

// オブジェクトに関する情報を出力
echo "veggie: CLASS ".get_class($veggie)."\n";
echo
"leafy: CLASS ".get_class($leafy);
echo
" PARENT ".get_parent_class($leafy)."\n";

// veggieのプロパティを表示
echo "\nveggie: プロパティ\n";
print_vars($veggie);

// そしてleafyのメソッドを表示
echo "\nleafy: メソッド\n";
print_methods($leafy);

echo
"\nParentage:\n";
class_parentage("leafy", "Spinach");
class_parentage("leafy", "Vegetable");
?>
</pre>

注意すべき大事な点ですが、上記の例ではオブジェクト $leafyVegetableのサブクラスであるクラス Spinachのインスタンスであり、 このスクリプトの最後の部分は以下のような出力となります。

[...]
Parentage:
Object leafy does not belong to a subclass of Spinach
Object leafy belongs to class spinach a subclass of Vegetable

目次
call_user_method_array --  パラメータの配列を指定してユーザメソッドをコールする[古い関数]
call_user_method --  指定したオブジェクトのユーザーメソッドをコールする[古い関数]
class_exists -- クラスが定義済か確認する
get_class_methods -- クラスメソッドの名前を連想配列として返す
get_class_vars --  クラスのデフォルトプロパティを配列として返す
get_class -- オブジェクトのクラス名を返す
get_declared_classes -- 定義済のクラスの名前を配列として返す
get_declared_interfaces --  Returns an array of all declared interfaces
get_object_vars -- オブジェクトプロパティを配列として返す
get_parent_class -- オブジェクトの親クラスの名前を返す
interface_exists -- Checks if the interface has been defined
is_a --  オブジェクトがこのクラスのものであるかこのクラスをその親クラスの1 つとしている場合にTRUEを返す
is_subclass_of --  あるオブジェクトが指定したクラスのサブクラスに属するかどうかを調 べる
method_exists -- クラスメソッドが存在するかどうかを確認する


add a note add a note User Contributed Notes
クラス/オブジェクト関数
cjones
03-Mar-2005 09:27
If anyone is interested in looking for a way to dynamically load existing objects into a class, here is what I found very useful.

//---------------------------------------------------------
// Dynamically load External Objects into a class

  function objRef ( &$obj ) {   
   eval("\$this->obj_".get_class($obj)." = \$obj;");
  }
//---------------------------------------------------------
// Reference by using: $this->obj_[object Name]->[var|f{}]

Example:

class date {  function date ( ) { $this->date = "March 3rd"; } }
class time {  function time ( ) { $this->time = "12:30pm"; } }

class show {
   function objRef ( &$obj ){
       eval("\$this->obj_".get_class($obj)." = \$obj;");
   }
   function test ( $var ){
       echo "$var".$this->obj_date->date." @ ".$this->obj_time->time;
   }
}

$date = new date;
$time = new time;
$show = new show;
   $show->objRef($date);
   $show->objRef($time);
   $show->test("Time Now => ");

// Output: Time Now => March 3rd @ 12:30pm

I found the prefix 'obj_' before the class name useful because it helped me to automatically identify external object references when scanning through my scripts. You can omit this if you want. Hope this helps someone.
http://sc.tri-bit.com/ StoneCypher
02-Mar-2005 06:25
to covertka at muohio dot edu and pillepop2003 at yahoo dot de:

There's a much easier solution to getting a class' name for working with a factory function.  Let's assume you're doing something like this:

<?php

 
function FactoryFunction($whatever, $instancedata) {

   switch (
$whatever) {
     case
'stuff'      : return new Stuff($instancedata);
     case
'otherstuff' : return new Otherstuff($instancedata);
   }

  }

?>

Now, consider the named parameter idiom and remember that PHP uses hashes for everything; as a result make the following changes:

<?php

 
function FactoryFunction($whatever, $instancedata) {

   switch (
$whatever) {

     case
'stuff'      : return array('typeis'=>'stuff',      'instance'=>new Stuff($instancedata));
     case
'otherstuff' : return array('typeis'=>'otherstuff', 'instance'=>new Otherstuff($instancedata));

   }

  }

?>

Nice 'n simple.  It seems that what the original poster wanted was something like C++ static data members; unfortunately as PHP4 has no static variables at all, there would need to be significant language change to support static-like behavior.  If you move to PHP5, the static keyword solves your problem cleanly.
covertka at muohio dot edu
03-Jan-2005 01:27
To pillepop2003 at yahoo dot de:

I have the same issue.  I have a base class that manages database tasks for a number of child classes.  One of the functions in the base class is a find() method that returns instances of the child classes.  Since find() is usually called as a static method, it needs to know the name of the child class.  As you've found, this appears to be impossible to get in an easy fashion.

The only way I've found to get the child class name is to use the debug_traceback() function.  This requires me to have a find() method in every child class, but it does work.

Here's an example:

<?php
 
require_once("Application.php");

  class
parentClass {
   function
find() {
    
$className = NULL;
     foreach (
debug_backtrace() as $bt) {
       if (
$bt['function'] == __FUNCTION__) {
        
$className = $bt['class'];
       }
     }

    
// here should be some code to find the proper id, let's assume it was id 1
    
$id = 1;
     return new
$className($id);
   }
  }
 
  class
foo extends parentClass {
   function
__construct($id) {
    
$this->id = id;
   }
  
   function
find() {
     return
parent::find();
   }
  }
 
  class
bar extends parentClass {
   function
__construct($id) {
    
$this->id = id;
   }

   function
find() {
     return
parent::find();
   }
  }
 
 
$a = foo::find();
 
printf("Type for \$a: %s<br/>\n", get_class($a));
 
$b = bar::find();
 
printf("Type for \$b: %s<br/>\n", get_class($b));
?>
iparanoid at gmx dot de
04-Aug-2004 06:17
To pillepop2003 at yahoo dot de:

It seems to me if there really is no nice way to get the class name in an un-instanciated class, there is a workaround in PHP5 though using static/class variables.

Example:

<?php

class myFoo
{
   static
$__ClassName = __CLASS__;

   static function
getClassName()
   {
       return
myFoo::$__ClassName;
   }
};

class
myFooExtended extends myFoo
{
   function
__construct()
   {
      
myFooExtended::$__ClassName = __CLASS__;
   };
};

?>

However, you'll need to have at least instanciated an object of the class myFooExtended before calling getClassName or introduce some other initialization (the class variable will need to be set at some point to __CLASS__ in the sub-class).
greg at doutromundo dot com
06-Jul-2004 02:58
As programmers, you're probably more organized than me, but, I do try and maintain some order in my classes and codes and separate them in "packages" as in java.
This helped me keep them organized but caused havok when trying to use them, so what I did was to create a class that handles the loading of classes (which I instanciate in all pages) along with my error handling class all bundled up. This way, I can load my classes with a command similar to
$baseClass->loadClass("package","className"[,"constructor"]);

the function responsible for this has some checking to see if they are loaded and stuff like that...

function loadClass($packageName,$className,$constructor=""){
  // if you dont have a constructor declare any function inside
  // the class
  if ($constructor==""){
   $constructor=$className;
  }
  if(!is_callable(array($className,$constructor))){
   if (defined("CLASS_DIR")){
     $pkg = CLASS_DIR.$packageName."/";
       if (is_dir($pkg)){
         // we have a directory with the package name
         $cls = $pkg.$className.".class.php";
         if(is_file($cls)){
           // we have a file
           include_once($cls);
         }else{
           die("Class <b>$className</b> could not be found in package <b>$packageName</b> , please check your instalation");
         }
       }else{
         die("Package <b>$packageName</b> could not be found, please check your instalation");
       }
     }
   }
}

Just remember to define CLASS_DIR as the physical path for the directories where you packages are...

Hope this comes in handy...

Here's an example of a diretory strucutre...
/var/www/classes/  <- this would be CLASS_DIR
in there I have:
package1/
     name.class.php
     name2.class.php
....

The loadClass would look like: loadClass("package1","name");

Cute and easy
ettinger at consultant dot com
18-Jun-2004 11:59
Re: Looking for an uninstantiated class

# Loads data from a table into a class object
class LFPDataFactory extends LFPObject {
       var $object;
       var $class;
       var $table;
       function LFPDataFactory($args) {
               $this->unpackArgs($args); // assigns locals from $args
               if (in_array(strtolower($this->class), get_declared_classes())) {
                       $this->object = new $this->class;
                       // assemble the columns in the table...
                       // select their values and put them in our new object...
               } else { trigger_error("Class ".$this->class." not found", E_USER_ERROR); }
       }
}
$r = new LFPDataFactory("class=LFPLayout,table=layout");
$new_obj = $r->object; // this is a LFPLayout object.
print_r($new_obj);

This class looks to see if the class exists, then instantiates it -- a declared class is not the same as an instantiated class. As long as LFPLayout exists somewhere in the scripts, get_declared_classes() will find it. Remember strtolower on compare, however.

Why would I do this? Because I have my class layouts the same as their respective tables; the factory then selects the data (making sure that the variables match) and plugs in the data. (I've left out the actual code to do the selection/insertion).
brett_hegr xATx yahoo xDOTx com
10-Jun-2004 12:46
// Useful function for determining if an object is either an
// instance or a subclass of a particular class.
function is_class($object,$class_name)
{
  $parent = is_a($object, $class_name);
  $child = is_subclass_of($object, $class_name);
  return $parent xor $child;
}
HOC
28-May-2004 04:40
to pillepop2003

Why do u want to know the classname of an non-existant object?

The only possible explanation for this question seems to me u want to know the class before u instantiate the object. Well, this is of no use since u always instantiate a class of ur choice.

When the class is instantiated into an object u can find the class of the object by means of get_class(). This is all u need. In case of inheritance u can use get_class($this) to get the class of the instantiated object. Now u can differentiate according to which class the object belongs to.

e.g.:

<?php
class A{
   function
A(){
    
$class_of_this = get_class($this);
     echo
'Object is an instance of class '.$class_of_this.' which is the ';
     if(
strcmp($class_of_this,'A')==0)
         echo
'parent-class';
     else if(
strcmp($class_of_this,'B')==0)
         echo
'child-class';
     echo
".\n";
   }
}

class
B extends A{
   function
B(){
    
$this->A();
   }
}

$object1 = new A();
$object2 = new B();
?>

When u run this code-snippet the output will be:

Object is an instance of class A which is the parent-class.
Object is an instance of class B which is the child-class.
pillepop2003 at yahoo dot de
26-May-2004 05:05
I spent several hours finding out, that there seems to be no way to determine the name of an uninstantiated class.

e.g. you can't do anything like

class_b::give_me_ur_name();
where give_me_ur_name() should return "class_b".

(This is a lack, cos' it can be important to determine the classes' name when u use inherited objects...)
mfirat at fibronline dot com
02-Apr-2004 01:18
<?php
  
class calculator {
     var
$c;
   function
addition($a, $b) {
      
$this->c = $a + $b;
       return
$this->c;
   }
      
   function
subtraction($a, $b) {
      
$this->c = $a - $b;
       return
$this->c;
   }
      
   function
multiplication($a, $b) {
      
$this->c = $a * $b;
       return
$this->c;
   }
      
   function
division($a, $b) {
      
$this->c = $a / $b;
       return
$this->c;
   }
 }

$cc = new calculator;
echo
$cc->addition(20, 10)."<br>";
echo
$cc->subtraction(20, 10)."<br>";
echo
$cc->multiplication(20, 10)."<br>";
echo
$cc->division(20, 10)."<br>";
?>
Fasoro Oladipo <dipofasoro at yahoo dot co dot uk>
14-Mar-2004 05:49
<?php
/*
[Why Not Use Classes]

Since PHP is object oriented OOP. Use it's features to the maximum.
 You can define ur business logic, data logic encapsulated in classes.
  For people who are not OOP,you might be wondering why this is needed.
   it is for code clarity, reusability, portability, ease of maintenace.
   Let's say for example, your site does a Login, Register, Feedback,
   Update, UnRegister and u are using a Informix database server.
You can */

//file user.php
class user {
   var
$dbconn
  
function user() {
      
//do initialisation
      
$this->dbconn = DB::getInformix();
   }
   function
Login($uname, $pass) {
      
//do login on uname and pass on Informix Server
       //run SQL queries on the Server
  
}
   function
Register($uname, $pass, $name, $email) {
      
//do register by running SQL Queries on Informix Server
  
}
   function
FeedBack($name, $email, $msg) {
      
//add feedback to informix server by running sql_queries
  
}
   function
Update($name, $email) {
      
//update name, email on Informix Server
  
}
   function
UnRegister() {
      
//delete user account from the informix server
  
}
}

//file template.php
class template {
   function
showlogin() {
      
//show the login interface
  
}
   function
showwelcome() {
      
//show welcoime when the person is logged in
  
}
}

//file DBs.php
class DB {
   function
getInformix() {
      
//get informix database conn
  
}
   function
getMySQL() {
      
//get MySQL conn
  
}
   function
getPostGRESQL() {
      
//get  PostGRESQL
  
}
}
/*
the file user will be included in all pages that can do a login or reg.
To get an informix database connection call DB::getInformix();
all username, server, password everything is handled in there.
Now the cue is to do login you just*/
$usr = new user();
$usr->Login($_POST["uname"], $_POST["pass"]);
//to do a register the same too is applied.
$usr->Register($_POST["uname"], $_POST["pass"], $_POST["name"], $_POST["email"]);
/* and so on..
all the logic of validation ands inserrting into the database is (login/register)
is done behind the bars of the class
to show the login interface you call template::showLogin()
You might have been wondering then what is new.
Consider if you want to change the login interface and the login has been declared
in 20 pages differently, it will be hard to add a [Forgot Password] link at the
bottom of the submit button. but if it were to be declared as a class function
just change the look in template::showLogin() and it will reflect in the 20 pages
immdeiately.
Consider again that you want users to specify that if they try to login from that
particular system IP address. They should be automatically logged in without
showing login interface. You can just extend the function to add an extra parameter */
Login($uname, $pass, $rememberIP);
/*and add a checkbox to template::showLogin(); call */
$usr->Login($_POST["uname"], $_POST["pass"], isset($_POST["remeberIP"]);
/*
and in the function interface you change your business logic to accomodate the
new parameter to taste.
Now let's say you just assume you connect to the informix database in 35 places
in your site and you want to change the login password to database. just chasnge
it in DB::getInformix(); and it will be reflected in the 35 pages if all of them
call DB::getInformix(). This will have saved u a headache of Search/Replace in
35 pages if you have connected explicitly in all the pages.
Another main issue is your IT manager comes the next morning and tells you that
he has heard that MySQL is now the bomb and wants a Database server change
to mySQL without the site getting down. if you are the wise one like me just
change $this->dbconn in the user class to DB::getMySQL(); in the constructor.
if u are not as wise. i am very sure this will give you at least a week long
HeadAche.

[Why Not Use Classes] is presented by Fasoro Oladipo, in Nigeria.
Fasoro Oladipo is a staunch advocate of OOP.
Thanks for reading this text, hope you have a change of mind.
*/
?>
heleon
12-Jan-2004 10:22
Hi again,

...to get around the undeclared properties problem is to use Get/Set-functions. The way it should be, and has to be in PHP to be secure.

Heleon
heleon@ergens
12-Jan-2004 10:11
Hi,

Take care with setting properties outside a class. I thought I had extended a var named Name en used it outside its class. After some searching I found that it was not the extended Name that was set but a new generated one. Created when setting it. With normal variables I don't find undeclared vars a problem. But with classes it could get messy I think.

$this->Characters[$this->CharacterID]->Name = "Hank";

Heleon
ar at 5mm de
28-Aug-2003 02:59
I missed some kind of function to dynamicly override or extend an Object:

-----------------------------------------
function &extendObj(&$obj, $code) {
   static $num = 0;
  
   $classname = get_class($obj);
   $newclass = $classname.$num;
  
   eval('class '.$newclass.' extends '.$classname.' { '.$code.' }');
  
   $newobj = new $newclass();

   $vars = get_class_vars($classname);
   foreach($vars AS $key=>$value) {
       $newobj->$key = &$obj->$key;
   }
  
   return $newobj;
}
-----------------------------------------

This creates a new class which extends the old one by the given code parameter, instanciates it and copy all vars from the old obj to the new one.

-----------------------------------------
class testA {
   var $prop = 'a';
  
   function funcA($val) {
       $this->prop = $val;
   }
  
   function value() {
       return $this->prop;
   }
}

$obj = new testA();

$newobj = &extendObj(&$obj, 'function addX() { $this->prop .= "x"; }');

$newobj->funcA('abc');
$newobj->addX();
echo $newobj->value();
-----------------------------------------

Results in 'abcx'. You can use the function multiple times and also with class variables. Be carefull, even if $newobj is just a copy of $obj, $obj->value() will return 'abcx', too, because of the & operator: $newobj->$key = &$obj->$key;
pixellent at stodge dot net
19-Aug-2003 06:07
In case you were wondering, you can't do the following in PHP:

$name = wsConfig::GetInstance()->GetValue("name");

It causes a parse error, I think due to trying to call GetValue. And yes I do have a function called GetValue in my wsConfig class.

This is my singleton:

function &GetInstance()
{
   static $Instance;
   if (!isset($Instance))
   {
       $Instance = new wsConfig();
   }
   return $Instance;
}
zidsu at hotmail dot com
08-Jul-2003 12:24
FYI: if you want to split your class into manageble chunks, what means different files for you, you can put you functoins into includes, and make include() have a return value. Like this:

class Some_class {
  var $value = 3;
  function add_value ($input_param) {
   return include ("path/some_file.php");
  }
}

And your included file:

$input_param += $this->value;
return $input_param;

Then your function call will be:

$instance = new Some_class ();
$instance->add_value (3);

And this will return
6
hopefully :P

Keep in mind though, that the scope in the included file will be identical to the scope the function 'add_value' has.
And if you want to return the outcome, you should also have a return statement made in your include as well.
ninja (a : t) thinkninja (d : o : t) com
10-May-2003 06:37
the best way i found to call an instance of a class from within another class is like so:

class foo {
 
 var $meta = 1;

}

class bar {

 var $foo;

 function bar(&$objref) //constructor
 {
   $this->foo =&  $objref;
 }

 function doohickey()
 {
   return $this->foo->meta;
 }

}

$fooclass = new foo();
$barclass = new bar($fooclass);

echo $barclass->doohickey();
asommer*at*as-media.com
20-Sep-2002 09:52
Something I found out just now that comes in very handy for my current project:

it is possible to have a class override itself in any method ( including the constructor ) like this:

class a {

..function ha ( ) {
....if ( $some_expr ) {
......$this = new b;
......return $this->ha ( );
....}
....return $something;
..}

}

in this case assuming that class b is already defined and also has the method ha ( )

note that the code after the statement to override itself is still executed but now applies to the new class

i did not find any information about this behaviour anywhere, so i have no clue wether this is supposed to be like this and if it might change... but it opens a few possibilities in flexible scripting!!
einhverfr at not-this-host dot hotmail dot com
14-Sep-2002 07:35
You may find it helpful in complex projects to have namespaces for your classes, and arrange these in a hierarchical manner.  A simple way to do this is to use the filesystem to order your hierarchies and then define a function like this:

function use_namespace($namespace){

require_once("namespaces/$namespace.obj.php");

}

(lack of indentation due to HTML UI for this page)
This requires that all your object libraries end in .obj.php (which I use) but you can modfy it to suit your needs.  To call it you could, for exmaple call:

use_namespace("example");
or if foo is part of example you can call:
use_namespace("example/foo");
justin at quadmyre dot com
19-Aug-2002 04:38
If you want to be able to call an instance of a class from within another class, all you need to do is store a reference to the external class as a property of the local class (can use the constructor to pass this to the class), then call the external method like this:

$this->classref->memberfunction($vars);

or if the double '->' is too freaky for you, how about:

$ref=&$this->classref;
$ref->memberfunction($vars);

This is handy if you write something like a general SQL class that you want member functions in other classes to be able to use, but want to keep namespaces separate. Hope that helps someone.

Justin

Example:

<?php

class class1 {
   function
test($var) {
      
$result = $var + 2;
       return
$result;
   }
}

class
class2{
   var
$ref_to_class=''; # to be pointer to other class

  
function class1(&$ref){ #constructor
      
$this->ref_to_class=$ref; #save ref to other class as property of this class
  
}

   function
test2($var){
      
$val = $this->ref_to_class->test($var); #call other class using ref
      
return $val;
   }
}

$obj1=new class1;
# obj1 is instantiated.
$obj2=new class2($obj1);
# pass ref to obj1 when instantiating obj2

$var=5;
$result=obj2->test2($var);
# call method in obj2, which calls method in obj1
echo ($result);

?>
matthew at fireflydigital dot com
29-Apr-2002 04:48
This is a pretty basic data structure, I know, but I come from a C++ background where these things were "da bomb" when I was first learning to implement them. Below is a class implementation for a queue (first-in-first-out) data structure that I used in a recent project at my workplace. I believe it should work for any type of data that's passed to it, as I used mySQL result objects and was able to pass the object from one page to another as a form element.

# queue.php

# Define the queue class
class queue
{
   # Initialize class variables
   var $queueData = array();
   var $currentItem = 0;
   var $lastItem = 0;
  
   # This function adds an item to the end of the queue
   function enqueue($object)
   {
       # Increment the last item counter
       $this->lastItem = count($this->queueData);
      
       # Add the item to the end of the queue
       $this->queueData[$this->lastItem] = $object;
   }
  
   # This function removes an item from the front of the queue
   function dequeue()
   {
       # If the queue is not empty...
       if(! $this->is_empty())
       {
           # Get the object at the front of the queue
           $object = $this->queueData[$this->currentItem];
          
           # Remove the object at the front of the queue
           unset($this->queueData[$this->currentItem]);
          
           # Increment the current item counter
           $this->currentItem++;
          
           # Return the object
           return $object;
       }
       # If the queue is empty...
       else
       {
           # Return a null value
           return null;
       }
   }
  
   # This function specifies whether or not the queue is empty
   function is_empty()
   {
       # If the queue is empty...
       if($this->currentItem > $this->lastItem)
          
           # Return a value of true
           return true;
          
       # If the queue is not empty...
       else
      
           # Return a value of false
           return false;
   }
}

?>

# Examples of the use of the class

# Make sure to include the file defining the class
include("queue.php");

# Create a new instance of the queue object
$q = new queue;

# Get data from a mySQL table
$query = "SELECT * FROM " . TABLE_NAME;
$result = mysql_query($query);

# For each row in the resulting recordset...
while($row = mysql_fetch_object($result))
{
   # Enqueue the row
   $q->enqueue($row);
}

# Convert the queue object to a byte stream for data transport
$queueData = ereg_replace("\"", "&quot;", serialize($q));

# Convert the queue from a byte stream back to an object
$q = unserialize(stripslashes($queueData));

# For each item in the queue...
while(! $q->is_empty())
{
   # Dequeue an item from the queue
   $row = $q->dequeue();
}
c.bolten AT grafiknews DOT de
22-Apr-2002 01:14
another way to dynamically load your classes:

==========================
function loadlib($libname) {
     $filename = "inc/".$libname.".inc.php";
     // check if file exists...
     if (file_exists($filename)) {
         // load library   
         require($filename);
         return TRUE;
     }
     else {
   // print error!
   die ("Could not load library $libname.\n");
     }
}

:)

have phun!

-cornelius
a2zofciv2 at hotmail dot com
29-Sep-2001 05:10
I spent 20 minutes or so trying to figure this out, maybe someone else has the same problem.

To access a class' function from within the class you would have to say $this->functionname(params), rather than just functionname(params) like in other programming languages.

Hope this helps
gateschris at yahoo dot com
08-Mar-2001 09:59
[Editor's note: If you are trying to do overriding, then you can just interrogate (perhaps in the method itself) about what class (get_class()) the object belongs to, or if it is a subclass of a particular root class.

You can alway refer to the parent overriden method, see the "Classes and Objects" page of the manual and comments/editor's notes therein.]

There is no function to determine if a member belongs to a base class or current class eg:

class foo {
 function foo () { }
 function a () { }
}

class bar extends foo {
 function bar () { }
 function a () { }
}

lala = new Bar();
------------------
how do we find programmatically if member a now belongs to class Bar or Foo.

<classkit_method_renamecall_user_method_array>
 Last updated: Tue, 21 Dec 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: /
Last updated: Mon Mar 14 08:13:06 2005 Local time zone must be set--see zic manual page