Autor | Zpráva | ||
---|---|---|---|
Martin Hampl Profil |
#1 · Zasláno: 15. 2. 2014, 22:30:55
Dobrý den,
začínám programovat oop a nevím, jak předávat objekty mezi stránkami. Jedná se o objekt, který se mi stará o přihlašování. Pro jednoduchost napíšu něco jednodužšího co mi taky nefunguje.. Nejdříve vytvoření class Auto { public $barva = 'cervena'; public function ukazBarvu() { return $this->barva; } } if($_SESSION['ferrari']=="") { $ferrari = new Auto; } else { $ferrari = $_SESSION['ferrari']; } $barvicka=$ferrari->ukazBarvu(); echo $barvicka; $_SESSION['ferrari']=$ferrari; Co dělám špatně? A je vůbec nějaká jiná možnost ukládat objekty než pomocí session? |
||
Davex Profil |
A
session_start() na začátku skriptu máš? Jen připomínám, že před voláním této funkce také nesmí být žádný výstup.
|
||
Martin Hampl Profil |
Davex:
mám, úplně na začátku všeho... + taky jsem zkoušel funkčnost session (uložení textovýho řetězce..) Davex: Jo počkat.. To jakože před voláním téhle funkce nemůžu mít html?? Davex: Já totiž mezi tagy <body></body> Dávám php include a tam píšu ten kod...
|
||
Alphard Profil |
#4 · Zasláno: 15. 2. 2014, 23:25:26
Zcela na začátku stačí mít session_start(). Další kód už může být uvnitř stránky, ale návrhově šťastné řešení to není.
|
||
Martin Hampl Profil |
Alphard: Jj session start() mám úplně na začátku. Tak se omlouvám ale problém přetrvává. Ale zjistil jsem zajímavou věc. Když totiž definování objektu uzavřu do samostatného souboru, tak mi to nefunguje... tzn: <?php SESSION_START(); include "trida.php"; ?> <!DOCTYPE html> <html lang="cs" dir="ltr"> <head> <meta charset="UTF-8"> <meta name="description" content="bla bla" /> <meta name="keywords" content="bla bla" /> <meta name="author" content="bla bla" /> <title>bla bla</title> </head> <body> <?php $barvicka=$ferrari->ukazBarvu(); echo $barvicka; $_SESSION['ferrari']=$ferrari; ?> </body> </html> Ale tohle už funguje: <?php SESSION_START(); class Auto { public $barva = 'cervena'; public function ukazBarvu() { return $this->barva; } } if($_SESSION['ferrari']=="") { $ferrari = new Auto; } else { $ferrari = $_SESSION['ferrari']; } ?> <!DOCTYPE html> <html lang="cs" dir="ltr"> <head> <meta charset="UTF-8"> <meta name="description" content="bla bla" /> <meta name="keywords" content="bla bla" /> <meta name="author" content="bla bla" /> <title>bla bla</title> </head> <body> <?php $barvicka=$ferrari->ukazBarvu(); echo $barvicka; $_SESSION['ferrari']=$ferrari; ?> </body> </html> Nevíte někdo přoč to nejde includovat? |
||
Martin Hampl Profil |
#6 · Zasláno: 16. 2. 2014, 00:36:44
Ano, tady bude zakopanej pes.. Když to dám do includu, tak se to chová tak, jak jsem psal nahoře... nejdříve to napíše červená, a po kliknutí na refresh nic...
|
||
Alphard Profil |
#7 · Zasláno: 16. 2. 2014, 01:13:17
Nevidím žádný zřejmý důvod. PHP pro includované soubory nemění viditelnost proměnných ani žádné jiné vlastnosti, které by tady měly mít vliv. Opravdu je v includovaném souboru totožný obsah, jaký funguje při přímém uvedení?
Mimochodem, ačkoliv názvy funkcí jsou case-insensitive, velká písmena bývá zvykem používat pouze pro konstanty. |
||
Jan Tvrdík Profil |
Alphard, Martin Hampl:
V době volání funkce session_start musí být třída jejíž objekt je uložený v session definovaná nebo přesněji instantiable (česky asi instanciovatelná), tedy stačí když je správně nastavený autoloading. Lze to tedy vyřešit například takto: <?php include __DIR__ . "/trida.php"; session_start(); ?> <!DOCTYPE html> ... |
||
Martin Hampl Profil |
#9 · Zasláno: 16. 2. 2014, 10:01:19 · Upravil/a: Martin Hampl
Jan Tvrdík:
Tak jsem to vyzkoušel a funguje to. Děkuji.. Přesunul jsem akorát session start za třídu. Jinak děkuji všem co napsali, trápil jsem se s tím dost dlouho... |
||
Časová prodleva: 10 let
|
0