PhpRiot
Become Zend Certified

Prepare for the ZCE exam using our quizzes (web or iPad/iPhone). More info...


When you're ready get 7.5% off your exam voucher using voucher CJQNOV23 at the Zend Store

Callback

Zend_Validate_Callback allows you to provide a callback with which to validate a given value.

Supported options for Zend_Validate_Callback

The following options are supported for Zend_Validate_Callback:

  • callback: Sets the callback which will be called for the validation.

  • options: Sets the additional options which will be given to the callback.

Basic usage

The simplest usecase is to have a single function and use it as a callback. Let's expect we have the following function.

<?php
function myMethod($value)
{
    
// some validation
    
return true;
}

To use it within Zend_Validate_Callback you just have to call it this way:

<?php
$valid 
= new Zend_Validate_Callback('myMethod');
if (
$valid->isValid($input)) {
    
// input appears to be valid
} else {
    
// input is invalid
}

Usage with closures

PHP 5.3 introduces closures, which are basically self-contained or anonymous functions. PHP considers closures another form of callback, and, as such, may be used with Zend_Validate_Callback. As an example:

<?php
$valid 
= new Zend_Validate_Callback(function($value){
    
// some validation
    
return true;
});

if (
$valid->isValid($input)) {
    
// input appears to be valid
} else {
    
// input is invalid
}

Usage with class-based callbacks

Of course it's also possible to use a class method as callback. Let's expect we have the following class method:

<?php
class MyClass
{
    public function 
myMethod($value)
    {
        
// some validation
        
return true;
    }
}

The definition of the callback is in this case almost the same. You have just to create an instance of the class before the method and create an array describing the callback:

<?php
$object 
= new MyClass;
$valid = new Zend_Validate_Callback(array($object'myMethod'));
if (
$valid->isValid($input)) {
    
// input appears to be valid
} else {
    
// input is invalid
}

You may also define a static method as a callback. Consider the following class definition and validator usage:

<?php
class MyClass
{
    public static function 
test($value)
    {
        
// some validation
        
return true;
    }
}

$valid = new Zend_Validate_Callback(array('MyClass''test'));
if (
$valid->isValid($input)) {
    
// input appears to be valid
} else {
    
// input is invalid
}

Finally, if you are using PHP 5.3, you may define the magic method __invoke() in your class. If you do so, simply providing an instance of the class as the callback will also work:

<?php
class MyClass
{
    public function 
__invoke($value)
    {
        
// some validation
        
return true;
    }
}

$object = new MyClass();
$valid = new Zend_Validate_Callback($object);
if (
$valid->isValid($input)) {
    
// input appears to be valid
} else {
    
// input is invalid
}

Adding options

Zend_Validate_Callback also allows the usage of options which are provided as additional arguments to the callback.

Consider the following class and method definition:

<?php
class MyClass
{
    function 
myMethod($value$option)
    {
        
// some validation
        
return true;
    }
}

There are two ways to inform the validator of additional options: pass them in the constructor, or pass them to the setOptions() method.

To pass them to the constructor, you would need to pass an array containing two keys, "callback" and "options":

<?php
$valid 
= new Zend_Validate_Callback(array(
    
'callback' => array('MyClass''myMethod'),
    
'options'  => $option,
));

if (
$valid->isValid($input)) {
    
// input appears to be valid
} else {
    
// input is invalid
}

Otherwise, you may pass them to the validator after instantiation:

<?php
$valid 
= new Zend_Validate_Callback(array('MyClass''myMethod'));
$valid->setOptions($option);

if (
$valid->isValid($input)) {
    
// input appears to be valid
} else {
    
// input is invalid
}

When there are additional values given to isValid() then these values will be added immediately after $value.

<?php
$valid 
= new Zend_Validate_Callback(array('MyClass''myMethod'));
$valid->setOptions($option);

if (
$valid->isValid($input$additional)) {
    
// input appears to be valid
} else {
    
// input is invalid
}

When making the call to the callback, the value to be validated will always be passed as the first argument to the callback followed by all other values given to isValid(); all other options will follow it. The amount and type of options which can be used is not limited.

Zend Framework