December 6, 2017 —John Koster
parseCallback
is a fairly simple method, even though it serves a somewhat specialized purpose. The following syntax for class names and method names can be found utilized throughout the Laravel framework:
1ClassName@someMethodName
The point is that there is a string, split by the @
symbol, with the class name on the left and a method name on the right. We can use the parseCallback
method to break up this string, and also specify a $default
method name. If there is nothing on the right hand side of the @
symbol, or if there is no @
symbol, the $default
is used as the returned method name.
The function returns an array, with two elements. The first element is the class name, and the second element will be the method name.
The signature of the parseCallback
method is:
1public static function parseCallback(2 $callback,3 $default = null4 );
The following examples will highlight the values that might be returned from this function:
1use Illuminate\Support\Str;2 3Str::parseCallback('MyClass', 'defaultValue');
The return value would be:
1array(2) {2 [0] "MyClass"3 [1] "defaultValue"4}
1use Illuminate\Support\Str;2 3Str::parseCallback('MyClass@method', 'defaultValue');
The return value would be:
1array(2) {2 [0] "MyClass"3 [1] "method"4}
1use Illuminate\Support\Str;2 3Str::parseCallback('MyClass@method@somethingElse', 'defaultValue');
The return value would be:
1array(2) {2 [0] "MyClass"3 [1] "method@somethingElse"4}
It is with this example that it becomes obvious that the parseCallback
will only observe the first @
symbol. Anything after the first occurrence of the @
symbol will become part of the method name returned.
1<?php2 3use Illuminate\Support\Str;4 5Str::parseCallback('', '');
The return value would be:
1array(2) {2 [0] ""3 [1] ""4}
An example use of this function could look like this:
1<?php 2 3use Illuminate\Support\Str; 4 5class MyClass { 6 7 /** 8 * Returns a hello message. 9 *10 * @return string11 */12 public static function sayHello()13 {14 return 'Hello';15 }16 17}18 19// Would send 'Hello' to the screen.20echo call_user_func(Str::parseCallback('MyClass@sayHello'));
∎
The following amazing people help support this site and my open source projects ♥️
If you're interesting in supporting my work and want to show up on this list, check out my GitHub Sponsors Profile.