Вызов класса PHP

Есть ли способ вызвать класс php (например, $ var = new className) и сохранить в var значение, возвращаемое функцией className?

Или есть способ вызвать класс и не выполнять функцию с тем же именем?


person Dylan    schedule 02.11.2009    source источник


Ответы (4)


Функция с тем же именем, что и у класса, заключалась в том, как работали «конструкторы» в php 4. Эта функция вызывается автоматически при создании нового экземпляра объекта.

В php 5 вместо этого используется новая магическая функция __construct(). Если вы используете php5 и не включаете метод '__construct', php будет искать метод конструктора в старом стиле. http://www.php.net/manual/en/language.oop5.decon.php

Поэтому, если вы используете php5, добавьте в свой класс метод __construct, и php перестанет выполнять ваш «метод с тем же именем, что и у класса» при создании нового объекта.

person txyoji    schedule 02.11.2009
comment
Огоооо спасибо большое. Добавление пустого метода __construct — это именно то, что мне нужно, чтобы все заработало. Ваши удивительные! - person Dylan; 02.11.2009

В PHP5 это возможно с помощью магического метода __toString(); чтобы вернуть значение из экземпляра/объекта класса.

просто

class MyClass{

function __construct(){
  // constructor
}

function __toString(){
  // to String
  return 5;
}

}

$inst = new MyClass();

echo $inst; // echos 5

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

person mauris    schedule 02.11.2009
comment
Так что мне придется переименовать функцию в __toString? - person Dylan; 02.11.2009
comment
конструкторы не возвращают значение. Если вы хотите получить значение из экземпляра класса, используйте магический метод __toString() - person mauris; 02.11.2009

Конструкторы не возвращают значения, они используются для создания экземпляра нового объекта, который вы создаете. $var всегда будет содержать ссылку на новый объект с использованием предоставленного вами кода.

Честно говоря, из вашего вопроса складывается впечатление, что вы не понимаете предназначения классов.

person Matt Huggins    schedule 02.11.2009
comment
Я не очень хорошо объясняю, что я имею в виду. Прямо сейчас я вызываю конструктор, как обычную функцию, и он возвращает данные. Но проблема в том, что функция затем вызывается дважды, один раз для класса и один раз, когда я на нее ссылаюсь. Есть ли способ обойти это, не меняя имя? Я знаю другой способ сделать это, но я действительно не хотел его менять. - person Dylan; 02.11.2009
comment
Боюсь, это на нескольких разных страницах, и не очень легко опубликовать здесь. Я просто пойду со своей другой идеей. Спасибо за помощь. - person Dylan; 02.11.2009

$var = new classname всегда будет возвращать экземпляр classname. Вы не можете заставить его вернуть что-то еще.

Прочтите это... http://www.php.net/manual/en/language.oop5.php

person Galen    schedule 02.11.2009