В нормализованной реляционной базе данных такая ситуация недопустима. У Вас должна быть объединяющая таблица, которая хранит одну строку для каждого отличного идентификатора объекта НЕЧТО и идентификатора Фруктов. Существование такой строки означает, что фрукт находится в том списке для НЕЧТО.
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'
Вы не можете объявить общедоступные $ 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();
Проблема связана с этой строкой кода:
public $tasks;
$this->tasks = new tasks();
$this->tasks->test();
$this->showPanel();
Ключевое слово public
используется в определении класса, а не в методе класса. В php вам даже не нужно объявлять переменную-член в классе, вы можете просто выполнить $ this-> tasks = new tasks ()
, и она будет добавлена за вас.