| 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: 12 let
|
|||
0