php - class_implements

Return the interfaces which are implemented by the given class

Description

array class_implements ( mixed $class [, bool $autoload] )
This function returns an array with the names of the interfaces that the given class and its parents implement.

Parameters


class
An object (class instance) or a string (class name).
autoload
Whether to allow this function to load the class automatically through the __autoload magic method. Defaults to TRUE.

Return Values

Returns an array or FALSE on error.

ChangeLog


Version Description
5.1.0 Added the option to pass the class parameter as a string. Added the autoload parameter.

Examples


Example 2297. class_implements() example

<?php
interface foo { }
class
bar implements foo {}
print_r(class_implements(new bar));
// since PHP 5.1.0 you may also specify the parameter as a string

print_r(class_implements('bar'));


function
__autoload($class_name) {
require_once
$class_name . '.php';
}
// use __autoload to load the 'not_loaded' class

print_r(class_implements('not_loaded', true));
?> 


The above example will output something similar to:
Array
(
    [foo] => foo
)

Array
(
    [interface_of_not_loaded] => interface_of_not_loaded
)

php - class_exists

class_exists — Checks if the class has been defined

Description

bool class_exists ( string $class_name [, bool $autoload] )
This function checks whether or not the given class has been defined.

Parameters


class_name
The class name. The name is matched in a case-insensitive manner.
autoload
Whether or not to call __autoload by default. Defaults to TRUE.

Return Values

Returns TRUE if class_name is a defined class, FALSE otherwise.

ChangeLog


Version Description
5.0.2 No longer returns TRUE for defined interfaces. Use interface_exists().
5.0.0 The autoload parameter was added.

Examples


Example 365. class_exists() example
<?php 
// Check that the class exists before trying to use it 
if (class_exists('MyClass')) {
$myclass = new MyClass();
}
?>

Example 366. autoload parameter example
<?php
function __autoload($class)
{
include(
$class . '.php');

// Check to see whether the include declared the class
if (!class_exists($class, false)) {
trigger_error("Unable to load class: $class", E_USER_WARNING);
}
}

if (
class_exists('MyClass')) {
$myclass = new MyClass();
}
?>

php - Class/Object Functions

These functions allow you to obtain information about classes and instance objects. You can obtain the name of the class to which an object belongs, as well as its member properties and methods. Using these functions, you can find out not only the class membership of an object, but also its parentage (i.e. what class is the object class extending).

Requirements

No external libraries are needed to build this extension.

Installation

There is no installation needed to use these functions; they are part of the PHP core.

Runtime Configuration

This extension has no configuration directives defined in php.ini.

Resource Types

This extension has no resource types defined.

Predefined Constants

This extension has no constants defined.

Examples

In this example, we first define a base class and an extension of the class. The base class describes a general vegetable, whether it is edible or not and what is its color. The subclass Spinach adds a method to cook it and another to find out if it is cooked.

Example 363. classes.inc
<?php
// base class with member properties and methodsclass 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;
}

}
// end of class Vegetable

// extends the base class
class Spinach extends Vegetable {

var
$cooked = false;

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

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

function
is_cooked()
{
return
$this->cooked;
}

}
// end of class Spinach
?>

We then instantiate 2 objects from these classes and print out information about them, including their class parentage. We also define some utility functions, mainly to have a nice printout of the variables.

Example 364. test_script.php
<pre>
<?php
include "classes.inc";
// utility functions
function print_vars($obj)
{
foreach (
get_object_vars($obj) as $prop => $val) {
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)
{
if (
is_subclass_of($GLOBALS[$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";
}
}
// instantiate 2 objects
$veggie = new Vegetable(true, "blue");$leafy = new Spinach();
// print out information about objectsecho "veggie: CLASS " . get_class($veggie) . "\n";
echo
"leafy: CLASS " . get_class($leafy);
echo
", PARENT " . get_parent_class($leafy) . "\n";
// show veggie propertiesecho "\nveggie: Properties\n";print_vars($veggie);
// and leafy methodsecho "\nleafy: Methods\n";print_methods($leafy);

echo
"\nParentage:\n";class_parentage("leafy", "Spinach");class_parentage("leafy", "Vegetable");?></pre>
One important thing to note in the example above is that the object $leafy is an instance of the class Spinach which is a subclass of Vegetable, therefore the last part of the script above will output:
[...]
Parentage:
Object leafy does not belong to a subclass of Spinach
Object leafy belongs to class spinach a subclass of Vegetable