Používanie objektu – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Používanie objektu – PHP – Fórum – Programujte.comPoužívanie objektu – PHP – Fórum – Programujte.com

 

Patrik
~ Anonymní uživatel
133 příspěvků
11. 1. 2018   #1
-
0
-

Dobrý deň, hľadám pár užitočných inofrmácií k OOP v PHP.
Mám stránku rozdelenú na menšie podstránky. Na začiatku index.php súboru si vytvorím Objekt. Objekt pracuje správne pokiaľ ho používam len v index.php. Ale akonáhle vytvorím súbor test.php a pomocou require_once ho zahrniem do index.php, tak Objekt v súbore test.php prestane fungovať a vypisuje mi to hlásenie, že je null.
Nutne potrebujem zistiť ako tento problém vyriešiť. S OOP mám skúsenosti z Java. Ale vyzerá to byť čiastočne odlišné...
Ďakujem za každú pomoc a vysvetlenie ako správne s objektom pracovať.

Nahlásit jako SPAM
IP: 2001:67c:1220:c1b0:68d8:3...–
Kit+15
Guru
11. 1. 2018   #2
-
0
-

#1 Patrik
Obvyklý postup je, že do externího souboru se píše pouze třída, ale objekt se vytváří ve volajícím skriptu.

Je docela důležité, aby se soubor s třídou jmenoval stejně jako třída plus přípona ".php". Ostatně to znáš z Javy.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Patrik
~ Anonymní uživatel
133 příspěvků
11. 1. 2018   #3
-
0
-

Áno to som spravil. Mám súbor kde je class. A potom až v indexe požijem O = new O();

Lenže ja potrebujem docieliť to, že ten Objekt inicializujem na začiatku a potom už len v daných častiach použíjem jeho jednu funkciu. No v tých nasledujúcich častiach mi to vypisuje null.

Nahlásit jako SPAM
IP: 2001:67c:1220:c1b0:68d8:3...–
Kit+15
Guru
11. 1. 2018   #4
-
0
-

#3 Patrik
Zřejmě v tom skriptu máš nějakou chybu.

BTW: Používat "O" jako název třídy je vážně úlet.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Patrik
~ Anonymní uživatel
133 příspěvků
11. 1. 2018   #5
-
0
-

"O" bol len príklad, nikdy nevytváram takéto objekty s podivnými názvami :D
Tak idem hľadať chybu teda

Nahlásit jako SPAM
IP: 2001:67c:1220:c1b0:68d8:3...–
Kit+15
Guru
11. 1. 2018   #6
-
0
-

#5 Patrik
Chtěl jsi jistě napsat "třídu". Názvy objektů obvykle začínají malým písmenem, aby se nepletly s názvy tříd.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Patrik
~ Anonymní uživatel
133 příspěvků
11. 1. 2018   #7
-
0
-

Prosím Vás, aká je "životnosť" toho objektu? Vytvorím si Objekt na začiatku index-u a môžem ho použiť len v ňom, a ešte jednom vloženom súbore. Akonáhle ten vložený súbor vkladá ďalšie, tak objekt prestáva existovať a už ho nemôžem ďalej používať. Je to normálne? 

Ostalo mi len znovu vytvoriť ten istý objekt vo vloženom-vloženom súbore. Ale to nebude správna voľba predpokladám.

Nahlásit jako SPAM
IP: 2001:67c:1220:c1b0:68d8:3...–
Kit+15
Guru
11. 1. 2018   #8
-
0
-

#7 Patrik
Životnost objektu je tak dlouho, dokud na něj existuje nějaký odkaz. Stejně jako v Javě. Možná jen zapomínáš ten objekt předávat dalším objektům, které s ním mají pracovat.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Patrik
~ Anonymní uživatel
133 příspěvků
11. 1. 2018   #9
-
0
-

Hmm, práveže je to len Objekt, ktorý je definovaný v indexe a za úlohu má zatiaľ len vrátiť string z array podľa požadovaného indexu.
Skúsim to naznačiť: 

index.php
<?php

require_once 'Day.php';

$day = new Day();

require_once 'including.php' //súbor, ktorý rozhoduje čo sa má ďalej vložiť

?>

including.php
<?php 
//pre zjednodušenie
//inak tam je pár if-ov a v každom nejaký require_once

//tu ešte práca s $day išla
require_once 'vypis.php'
?>

vypis.php
<?php 
echo $day->nameOfDay(0); //dajme tomu že očakávaný výpis je 'Pondelok'
?>

No vypíše error: Uncaught Error: Call to a member function nameOfDay() on null

Čo robím zle?

Nahlásit jako SPAM
IP: 2001:67c:1220:c1b0:68d8:3...–
Kit+15
Guru
11. 1. 2018   #10
-
0
-

#9 Patrik
Takové špagetování jsem s objekty ještě neviděl, takže ani netuším, proč to nefunguje. Zkus místo require_once, které zde nedává smysl, použít include.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
gna
~ Anonymní uživatel
1891 příspěvků
12. 1. 2018   #11
-
+1
-
Zajímavé
Kit +

Takhle jak to je, by to mělo fungovat. V tom "//pre zjednodušenie" asi bude nějaké kouzlo.

A když teda máš zkušenosti s Javou, tak proč v PHP děláš takové prasečiny? :D

Nahlásit jako SPAM
IP: 213.211.51.–
peter
~ Anonymní uživatel
4014 příspěvků
12. 1. 2018   #12
-
0
-

To by ti logicky fungovat nemelo. Aspon ne s require.
index <- including <- vypis
Vypis chce pouzit neco, co ve vypis neexistuje.
Require dela to, ze da do pameti cast kodu, na kterou se pak odkazuje. To, co je v require nedokaze pracovat s vnejkem. Muzes zkusit pridat do vypis a mozna i including

global $day;
Nahlásit jako SPAM
IP: 2001:718:2601:258:516b:b1...–
Kit+15
Guru
12. 1. 2018   #13
-
0
-

#12 peter
Za použití "global" se vyhazuje z práce, tak ho to neuč.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
4014 příspěvků
15. 1. 2018   #14
-
0
-

To je dobre. U takoveho zamestnavatele bych ani nechtel pracovat, ktery by mne terorizoval a mucil hloupostmi misto toho, aby mi veril.

Nahlásit jako SPAM
IP: 2001:718:2601:258:58d1:c1...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 54 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý