Простой синтаксис PHP OOP, вызывающий переменные из метода класса

Я в основном дизайнер и не имею большого опыта работы с ООП в PHP, поэтому, пожалуйста, будьте добры, поскольку моя терминология может быть не совсем точной. Это синтаксис PHP/OOP, с которым мне больше всего нужна помощь, и я несколько раз искал решение здесь и в Google, поскольку я предполагал, что это будет довольно прямой вопрос, но не нашел ничего, чтобы помочь.

Я пытаюсь создать метод класса, который извлекает данные учетной записи клиента из базы данных, используя идентификатор учетной записи клиента. Есть около 20 переменных, которые я хочу получить и получить доступ к ним на разных страницах моего сайта.

Вот мой файл класса (classfile.php):

class Accounts{

    // Function to get client data from database.
    public function getAccount($acctId){

        require("/var/www/vhosts/aqios.com/httpdocs/00omvat/dbinfo.php");
        mysql_connect("localhost","user","password") or die();
        mysql_select_db("database") or die();

        $query = "SELECT * FROM clients WHERE id='$acctId' LIMIT 1";
        $result = mysql_query($query) or die();
        while($row = mysql_fetch_array($result)){
            $this->$firstName = $row["firstName"];
            $this->$lastName = $row["lastName"];
            $this->$address1 = $row["address1"];
            $this->$address2 = $row["address2"];
            $this->$city = $row["city"];
            $this->$state = $row["state"];
            //etc., etc.
        }

        mysql_close();
    }

}

Вот одна из моих страниц (index.php):

include_once('classfile.php');

$acctId = 111111;
$object = new Accounts();
$object->getAccount($acctId); //Script dies unless I comment this line out.

Прежде всего, сценарий умирает, если я не закомментирую последнюю строку, так что что-то не так с моим синтаксисом. Но что мне действительно нужно знать, так это как вызвать и поместить город или любую другую из этих переменных на мою страницу? Я не знаю правильного синтаксиса. Я не могу представить, что это будет $object->getAccount($acctId)->$city. Я знаю, что это неправильно. Как мне вызвать город или любую другую переменную из этого объекта?

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

Заранее благодарим вас за любую помощь, которую вы можете предложить!

Джейсон


person user2076753    schedule 30.10.2013    source источник
comment
Не включать в метод, там тоже не инициализировать соединение. Не используйте mysql_*. С другой стороны, доступ к объектному свойству $firstName должен осуществляться так: $this->firstName, но сначала он должен быть инициализирован в классе, т.е. class Accounts { public $firstName; public $lastName; //... public function getAccount(...   -  person Royal Bg    schedule 30.10.2013


Ответы (2)


это неправильно

$this->$firstName = $row["firstName"];
       ^---remove the $

Так должно быть

$this->firstName = $row['firstName'];

И то же самое для последующих строк.

person Marc B    schedule 30.10.2013
comment
Спасибо за предложения. Интересно, как никто на самом деле не ответил на мой вопрос, хотя. Я спрашивал о синтаксисе вызова переменной метода. Конечно, мой запрос mysql был неправильным, но это был не мой вопрос. К сожалению, Stack не позволяет мне опубликовать всю рабочую копию, потому что я новичок, но я постараюсь не забыть сделать это через 8 часов. Что касается вызова метода vars, вот что мне нужно: $client = $object->getAccount($acctId); echo $client['firstName']; Это работает! - person user2076753; 30.10.2013

  1. Как упоминалось другими, вы должны использовать $this->firstName вместо $this->$firstName
  2. $this относится к объекту, а не к методу
  3. Это будет работать без явной инициализации, но вы должны определить для лучшего чтения все поля вашего объекта как общедоступные (или частные/защищенные и написать методы получения):

    учетные записи класса {

    public $firstName;
    public $lastName
    ...
    

    }

  4. С переменными, определенными как в 3, вы должны иметь возможность ссылаться на их значения с помощью $object->firstName

  5. Вероятно, вам следует подумать о разделении классов на два: учетные записи (как прокси-сервер БД) и учетная запись (как данные одной учетной записи), а в Accounts->getAccount вы создадите объект Account и вернете его, но это скорее архитектурное обсуждение
person sebapalus    schedule 30.10.2013