omaxphp
@omaxphp
Выучиться не значит знать

Как оптимизировать класс PHP?

В классе много функций, и в каждой функции есть одна и таже строчка кода
$nameF = __FUNCTION__; $nameF = str_replace("_", ".", $nameF);

Как сделать так, чтобы это было автоматически в каждой функции класса, вдруг есть всякие спец. функции по типу __constract()?
  • Вопрос задан
  • 2345 просмотров
Решения вопроса 2
comm1x
@comm1x
Web-developer
Добавьте кеширование. В определенных случаях это сильно соптимизирует дело.
protected $_aliasesCache = [];

public function getAlias($method)
{
	if (! array_key_exists($method, $this->_aliasesCache)) {
		$this->_aliasesCache[$method] = str_replace('_', '.', $method);
	}

	return $this->_aliasesCache[$method];
}

// Usage

public function some_method()
{
	$this->getAlias(__FUNCTION__);
}


Еще можно поиграться со стеком вызовов, чтобы не передавать аргумент, но я бы лучше это дело оставил так. При определении имя метода через стек, не забудьте изменить модификатор на protected/private.
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
class Util
{
  public static function ConvertFunctionName ($function_name)
  {
    return str_replace("_", ".", $function_name);
  }
}

class Class
{
  public function foo ()
  {
    $function_name = Util::ConvertFunctionName(__FUNCTION__);
  }
}


Других способов, насколько я знаю, не существует.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
мне кажется стоит разобраться зачем вообще эта строчка там нужна (реально не понимаю, это же метод класса, зачем там брать имя себя же? Оно же вам уже известно...

Ну а так - нет, такого ничего нету, ни магических констант - ничего. Если хочется извращений - можно через __call попробовать разрулить (сделать все методы приватными) но имхо лучше вообще от этой строчки избавиться.

От дублирования кода нормально избавляться вынося онвый в приватные методы.

p.s. пожалейте людей, код класса ни за что не показывайте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы