Мне нужно найти определенные реплики в строке и вызвать функции с этими репликами
пример
<?php
namespace App\Http\Controllers;
class ModulesController
{
private $modules = [ ['name' => 'someFunction','maxNumber' => 50] ];
public function checkFunctions($strings = NULL)
{
$moduleArrayId = array_search($strings ,array_column($this->modules, 'name');
if($moduleArrayId !== FALSE)
$this->$modules[$moduleArrayId]['name'];
}
public function someFunction()
{
return "it works";
}
}
И пример ресурса
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\ModulesController;
class BlockController extends Controller
{
public function __construct()
{
$this->middleware('auth:members');
}
public function index(Request $request)
{
$string = "someFunction";
$callBack = new ModulesController;
var_dump($callBack->checkFunctions($string)); //Always its NULL
}
}
Я должен использовать этот код, как это.
Если я смогу понять это, я постараюсь улучшить это.
Попробуй это:
public function checkFunctions($strings = NULL)
{
$moduleArrayId = array_search($strings ,array_column($this->modules, 'name'));
if($moduleArrayId !== FALSE) {
$method = $this->modules[$moduleArrayId]['name'];
return $this->$method();
}
}
Не уверен, насколько сильно вы изменили свой код для публикации здесь, но я бы посоветовал вам:
$modules
в ассоциативный массив, так что вы можете проверить, определен ли метод по индексу, вместо использования array_search. Это может заставить ваш код работать намного быстрее по мере увеличения размера этой структуры.Пример:
private $modules = [
'someFunction' => [
'maxNumber' => 50
]
];
// and then to check if the method is defined:
if (isset($this->modules[$strings])) {
// ...
}
Вы пропустили )
в
$moduleArrayId = array_search($strings ,array_column($this->modules, 'name'));
Вот почему вы получаете значение по умолчанию NULL
все время.