2015-04-25 3 views
1

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

Я пишу класс, чтобы делать все это вокруг управления учетными записями. (например, создать новую учетную запись, получить данные учетной записи, проверить, существует ли учетная запись.) В этом классе мне нужно выполнить некоторые MySQL-запросы. Поэтому я использую medoo-class (http://www.medoo.in).

class acc{ 

// Attributes 
public static $account; 
public $pw; 
protected $error; 

public function acc_exist() { 
    $database = new medoo(); 

    $acc_count = $database->count("table_accounts", ["column_account" => acc::$account]); 

    if ($acc_count == 0) {return true;} else {$this->error .= "Account exists already!";}; 
}}; 

Пожалуйста, обратите внимание на строку:

$database = new medoo(); 

и

$acc_count = $database->count("table_accounts", ["column_account" => acc::$account]); 

здесь я привести в Medoo. И ["column_account" => acc :: $ account] работает нормально. Как я читал в некоторых других сообщениях, я сделал $ accounts public static.

теперь я называю свой класс так:

$my_acc = new acc(); 
$my_acc->account = 'Luci'; 
$my_acc->acc_exist(); 

мне нужно работать, как это. Выполнение некоторых acc ($ account) затруднено в контексте остальной части моего кода.

Но, как я ожидал, я получаю сообщение об ошибке:

Strict Standards: Accessing static property acc::$account as non static

ясно моему, что статическое держит значение УАК в. поэтому мне понадобится другой путь. У кого-то появилась идея?

best, Lox

+0

У вас есть опечатка в коде $ accout должна быть $ account Думаю, – RST

+0

вы правы - но это не проблема. просто изменили переменные для лучшего понимания. походил на acc tbacc acccnt раньше. – Lox

ответ

1

Я не думаю, что вам нужно иметь $account, как статический, что не имеет смысла с тем, как вы, вероятно, собирается быть с помощью этого кода, попытайтесь иметь public $account;, а затем использовать ["column_account" => $this->account]

Итак:

class acc{ 

// Attributes 
public $account; 
public $pw; 
protected $error; 

public function acc_exist() { 
    $database = new medoo(); 

    $acc_count = $database->count("table_accounts", ["column_account" => $this->account]); 

    if ($acc_count == 0) {return true;} else {$this->error .= "Account exists already!";}; 
}}; 

Вот больше информации о том, как использовать static правильно: Static Keyword in PHP

+0

thx для вашего ответа. Извините, но это не сработает. Строка $ database-> count ("table_accounts", ["column_account" => $ this-> account]); относится к $ database als-объекту медуо-класса. Это означает, что если вы перейдете с учетной записью $ this->, вы вызовете учетную запись var $ в классе medoo, а не в классе acc. В этом проблема – Lox

+0

Вы попробовали код? Вы вызываете метод 'count' объекта' $ database' (который имеет класс 'medoo'), и вы передаете параметры методу, первый - это строка, вторая - ассоциативный массив, с парой значений ключа, значением которого является свойство 'account' текущего объекта' $ this' (который относится к классу 'acc'). Он должен работать. – Vex

+0

хм ... это звучит очень логично. Подожди минуту. я попробую еще раз. возможно, я перепутал что-то еще. – Lox

0

Вы вызываете переменную, которая не существует.

Вы объявили $ accout общедоступным и статическим.

Но вы пытаетесь вызвать $ account.

Заменить:

$my_acc->account = 'Luci'; 

С:

$my_acc->accout = 'Luci'; 
+0

за ваш быстрый ответ - пожалуйста, прочитайте мой последний комментарий к вопросу. Это изменилось. – Lox

+0

@ Lox Я проверил – PHPMan

0

Векс прав. Снимите ключевое слово static и используйте вместо него ["column_account" => $this->account].

Bests,

B.

+0

правый! thx все! – Lox