Назовите класс в другом классе в PHP

В нормализованной реляционной базе данных такая ситуация недопустима. У Вас должна быть объединяющая таблица, которая хранит одну строку для каждого отличного идентификатора объекта НЕЧТО и идентификатора Фруктов. Существование такой строки означает, что фрукт находится в том списке для НЕЧТО.

CREATE TABLE FOO ( 
  id int primary key not null,
  int1 int, 
  int2 int, 
  int3 int
)

CREATE TABLE Fruits (
  id int primary key not null,
  name varchar(30)
)

CREATE TABLE FOOFruits (
  FruitID int references Fruits (ID),
  FooID int references FOO(id),
  constraint pk_FooFruits primary key (FruitID, FooID)
)

Для добавления фруктов Apple к списку определенного НЕЧТО возражают с ID=5, Вы были бы:

INSERT FOOFruits(FooID, FruitID)
SELECT 5, ID FROM Fruits WHERE name = 'Apple'
9
задан Supernovah 23 September 2009 в 21:45
поделиться

2 ответа

Вы не можете объявить общедоступные $ tasks внутри метода (функции) вашего класса. Если вам не нужно использовать объект задач вне этого метода, вы можете просто выполните:

$tasks = new Tasks($this);
$tasks->test();

Вам нужно использовать "$ this->" только тогда, когда вы используете переменную, которая должна быть доступна во всем классе.

Ваши два варианта:

class Foo
{
    public $tasks;

    function doStuff()
    {
        $this->tasks = new Tasks();
        $this->tasks->test();
    }

    function doSomethingElse()
    {
        // you'd have to check that the method above ran and instantiated this
        // and that $this->tasks is a tasks object
        $this->tasks->blah();
    }

}

или

class Foo
{
    function doStuff()
    {
        $tasks = new tasks();
        $tasks->test();
    }
}

с вашим кодом:

class Admin
{
    function validate()
    {
        // added this so it will execute
        $_SESSION['level'] = 7;

        if (! $_SESSION['level'] == 7) {
            // barMsg('YOU\'RE NOT ADMIN', 0);
            return FALSE;
        } else {
            $tasks = new Tasks();
            $tasks->test();
            $this->showPanel();
        }
    }

    function showPanel()
    {
        // added this for test
    }
}
class Tasks
{
    function test()
    {
        echo 'test';
    }
}
$admin = new Admin();
$admin->validate();
24
ответ дан 4 December 2019 в 07:35
поделиться

Проблема связана с этой строкой кода:

public $tasks;
$this->tasks = new tasks();
$this->tasks->test();
$this->showPanel();

Ключевое слово public используется в определении класса, а не в методе класса. В php вам даже не нужно объявлять переменную-член в классе, вы можете просто выполнить $ this-> tasks = new tasks () , и она будет добавлена ​​за вас.

5
ответ дан 4 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: