Доброго времени суток. Затронул меня за одно место вот такой вот вопрос: Можно ли получить имена аргументов переменной длины (... $args, знаю, что можно), это необходимо для создания своеобразной функции-заполнителя переменных. Проще показать, чем объяснить, на данный момент это работает как-то так: PHP: public function genVars($selectors, &...$args) { $init = [ 'id' => isset($data->object->peer_id) ? $data->object->peer_id : null, 'user_id' => isset($data->object->from_id) ? $data->object->from_id : null, 'message' => isset($data->object->text) ? $data->object->text : null, 'payload' => isset($data->object->payload) ? $data->object->payload : null, 'type' => isset($this->data->type) ? $this->data->type : null, 'all' => $data, ]; $selectors = explode(',', $selectors); if (count($selectors) != count($args)) throw new VkApiException('Разное количество аргументов и переменных при инициализации'); foreach ($selectors as $key => $val) $args[$key] = $init[trim($val)]; } Ну и вызов: PHP: $coin->genVars('from_id,amount,verify,payload,data', $from_id, $amount, $verify, $payload, $data); Необходимо исключить из данного вызова часть с передачей имен, т.е: PHP: $coin->genVars($from_id, $amount, $verify, $payload, $data); Задача: найти более-менее оптимизированный костыль.
PHP: [ 'host' => $host, 'user' => $user, 'password' => $pass, 'dbname' => $dbname, 'port' => $port, 'charset' => $charset ] = $args; --- Добавлено --- PHP: public function __construct ( Lerma $lerma, array $params ) { $this -> lerma = $lerma; [ 'host' => $host, 'user' => $user, 'password' => $pass, 'dbname' => $dbname, 'port' => $port, 'charset' => $charset ] = $params; $this -> connect = new \mysqli( $host, $user, $pass, $dbname, $port ); if ( $this -> connect -> connect_error ) { throw new Error( "Error connect ({$this -> connect -> connect_errno}) {$this -> connect -> connect_error}" ); } $this -> connect -> set_charset( $charset ); }
Конечно спасибо, но это не то. --- Добавлено --- Решение было найдено за 2 минуты после публикации, самым сложным оказалось убедить автора библиотеки (да, это код из библиотеки, которая валяется на гитхабе), в том что так делать не нада, и проще сделать так: PHP: public function initVars(&$from_id, &$amount, &$payload, &$verify, &$data) { print 'OK'; $data_request = json_decode(file_get_contents('php://input')); $data = $this->data_request = $data_request; $id = isset($data_request->id) ? $data->id : null; $from_id = isset($data_request->from_id) ? $data_request->from_id : null; $payload = isset($data_request->payload) ? $data_request->payload : null; $amount = isset($data_request->amount) ? $data_request->amount : null; $verify = $this->verifyKeys(); }