1

Is there a way to bind an existing function to an anonymous one in php? Something like

$my_func = strip_tags();

Or must I half-redefine it, as a sort of anonymous wrapper, with the proper arguments and return value?

I tried googling this, but I suppose I didn't correctly suss the proper search phrase, as I didn't find results on the first page.

Edit I'm making a sort of function pipeline(?) where I can pass data and functions, and I want to pass functions as variables. I would like to keep the syntax the same and be able to use $output = $function($data) without having to write a bunch of anonymous wrappings for native functions. Also I would like to avoid using call_user_func so I don't have to re-write my existing code.

0

2 Answers 2

3

Simple.

$my_func = strip_tags(...); # string 'strip_tags' before PHP 8.1.0
$output = $my_func($data);
Sign up to request clarification or add additional context in comments.

Comments

3

You can bind the function by it's name. Have a look at the callable Interface from php

Code from the manual mentioned above

<?php 

// An example callback function
function my_callback_function() {
    echo 'hello world!';
}

// An example callback method
class MyClass {
    static function myCallbackMethod() {
        echo 'Hello World!';
    }
}

// Type 1: Simple callback
call_user_func('my_callback_function'); 

// Type 2: Static class method call
call_user_func(array('MyClass', 'myCallbackMethod')); 

// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));

// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Type 5: Relative static class method call (As of PHP 5.3.0)
class A {
    public static function who() {
        echo "A\n";
    }
}

class B extends A {
    public static function who() {
        echo "B\n";
    }
}

call_user_func(array('B', 'parent::who')); // A
?> 

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.