Как использовать переменные переменные в переменных класса и аргументах функций

Вот что я хочу сделать:

class Contacts {

private $_plural = 'contacts';
private $_single = 'contact';
private $_factory = 'contactfactory';
private $_model = 'contact_model';

private $_idname = $_plural . "Id";

function a($$_idname = 0) {

}
}

Эти две строки:

private $_idname = $_plural . "Id";

а также

function a ($$_idname = 0) {

не работают Зачем? И как я могу это исправить?

РЕДАКТИРОВАТЬ

Об аргументе функции:

Если $ _idname = «contactId», я хочу, чтобы аргумент был $ contactId. Вот почему у меня там два знака доллара. Возможно, это не правильный способ справиться с этим, но это то, чего я хочу достичь.

0

Решение

Вы могли бы изменить

private $_idname = $_plural . "Id";

в

private $_idname;
public function __construct(){
$this->_idname = $this->_plural.'Id';
}

первый.

Не видя достаточно в function a, Наверное, больше похоже на:

public function a($really = 'What is the point of those underscores?'){
${$this->_idname} = $really; // local $contacts var holds $really
}

Я действительно предполагаю, что вы хотите иметь метод, который автоматически изменит ваше экземплярное свойство Object. Вам не нужна переменная переменная для этого. Если вы хотите повлиять на переменную, которую вы передаете в качестве аргумента, это &$yourVar, Нет необходимости передавать свойство экземпляра Object в его собственный метод, поскольку у вас уже есть доступ к нему в методе с $this->yourVar,

1

Другие решения

В соответствии с PHP документация, Вы должны инициализировать атрибут класса с постоянным значением:

Эта декларация может включать инициализацию, но эта инициализация должно быть постоянным значением—то есть он должен быть в состоянии быть оцененным во время компиляции и не должен зависеть от информации времени выполнения для оценки.

Исправление для этого будет использовать конструктор класса:

function __construct() {
$this->_idname = $this->_plural . "Id";
}

Кроме того, вы не можете использовать динамическая переменная имена функций или методов:

Обратите внимание, что переменные переменные нельзя использовать с массивами PHP Superglobal внутри функций или методов класса. Переменная $ this также является специальной переменной, на которую нельзя ссылаться динамически.

2

По вопросам рекламы [email protected]