Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

Diskusia – 8. diel - Polymorfizmus, finálne prvky a autoloader v PHP

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Marek Šafránek:13.1.2015 18:34

Ahoj, jsem v bodě přepsání metody a nefunguje mi ručně opsaný kód

foreach ($lide as $clovek)
{
$clovek–>pozdrav();
echo('<br />');
}

ale, když do index.php vložím stejný kód zkopírovaný z tohoto tutoriálu, tak funguje / koukám jak blázen, nevidím, kde je rozdíl. Díky

Editované 13.1.2015 18:35
Odpovedať
13.1.2015 18:34
Stojí-li něco za námahu, je třeba to udělat pořádně...
Avatar
Odpovedá na Marek Šafránek
Marek Šafránek:13.1.2015 18:45

Vyřešila to výměna pomlčky v šipce za znaménko minus(-) , aha :D

Editované 13.1.2015 18:46
Odpovedať
13.1.2015 18:45
Stojí-li něco za námahu, je třeba to udělat pořádně...
Avatar
hocikto19
Člen
Avatar
hocikto19:28.6.2015 14:57
function nactiTridu($trida)
 {
         require_once("tridy/$trida.php");
 }

ako to riešiť, keď chcem mať classy pobalíčkované vo viac zložkách?

Odpovedať
28.6.2015 14:57
Multum in parvo.
Avatar
Odpovedá na hocikto19
Neaktivní uživatel:28.6.2015 15:08

Často se to řeší jmennými prostory. Třída se pak jmenuje třeba Model\User a includuje se soubor tridy/Model/U­ser.php :)

Odpovedať
28.6.2015 15:08
Neaktivní uživatelský účet
Avatar
alfonz
Člen
Avatar
Odpovedá na hocikto19
alfonz:28.6.2015 15:19

Toto se řeší pomocí tzv. Jmených prostorů neboli anglicky namespace. Každá třída je v jakémsi balíčku souvisejících tříd a tak by měla být pak i uložena, takže například třída Malíř ve jmeném prostoru Povolání(Povo­lani\Malir) by se měla na cházet v souboru Malir ve složce Povolani. Více o jmených prostorech by mělo být v 25. díle :)

Edit: Inoue Yūki byl rychlejší :D

Editované 28.6.2015 15:19
Odpovedať
28.6.2015 15:19
lmao
Avatar
Vít Cigánek:11.10.2015 21:55
function nactiTridu($trida)
{
        require("tridy/$trida.php");
}


spl_autoload_register("nactiTridu");

Tenhle kod mi nefunguje a nevim proč. Ma někdo nějaký nápad. :(

 
Odpovedať
11.10.2015 21:55
Avatar
Odpovedá na Vít Cigánek
Martin Konečný (pavelco1998):11.10.2015 22:08

OK, pro ujasnění, abychom se nemuseli jak tupci při každé otázce ptát "co na tom nefunguje?":
Když ti něco nefunguje, napiš, co přesně nefunguje (hází to tuhle a tuhle chybu / dělá to něco jiného, než by mělo / ...). V nejlepším případě sem hoď celý script, který máš.

Tak se ještě zeptám - co přesně ti na tom nefunguje?

Odpovedať
+1
11.10.2015 22:08
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovedá na Martin Konečný (pavelco1998)
Vít Cigánek:11.10.2015 22:15

Momentálně dvě věci. Pole ze stranky: http://www.itnetwork.cz/…-datove-typy tam jsem psal zdrojaky a nově

function myAutoloader($className)
{
    $path = 'tridy/';

    include $path.$className.'.php';
}

spl_autoload_register('myAutoloader');


         function nactiTridu($trida)
        {
            require("tridy/$trida.php");
        }

        spl_autoload_register("nactiTridu");




function my_autoloader($class)

{
include 'tridy/' . $class . '.php';
}

spl_autoload_register('my_autoloader');

Ani jeden ze způsobu nefunguje. :( Tak nevim jestli nemam něco nastavné blbě. Nevím kde se mam podívat do logů. Server mi instaloval kamarad a ja se pod linuxem moc nevyznam.

 
Odpovedať
11.10.2015 22:15
Avatar
Odpovedá na Vít Cigánek
Martin Konečný (pavelco1998):11.10.2015 22:19

V tom případě záleží, kde máš ty soubory se třídami.

Např. pokud budeš mít strukturu

index.php
tridy/Trida.php
tridy/Trida2.php
tridy/Trida3.php

tak v souboru index.php budeš mít

function myAutoloader($class)
{
        include "tridy/" . $class . ".php";
}

spl_autoload_register("myAutoloader");


$trida = new Trida();   // načte soubor  tridy/Trida.php
$trida2 = new Trida2();   // načte soubor tridy/Trida2.php

Zkus to nějak takto

Odpovedať
11.10.2015 22:19
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovedá na Martin Konečný (pavelco1998)
Vít Cigánek:12.10.2015 9:00
function myAutoloader($class)
{
        include "tridy/" . $class . ".php";
}

spl_autoload_register("myAutoloader");


$trida = new Trida();   // načte soubor  tridy/Trida.php
$trida2 = new Trida2();   // načte soubor tridy/Trida2.php

Tak ani tohle mi nefunguje a ani tohle

<?php

require_once('tridy/pole.php');

echo '<br />';
echo '<br />';
$pole1 = new Pole([1,2,3,4,5,6]);
$pole1->zobraz();

 ?>

a třída:

class Pole
{
    /** @var array */
    private $prvky;


    public function __construct(array $prvky) // pokud to má být pouze pole, lze uvést před argumentem hint
    {
        $this->prvky = $prvky;
    }


    public function pridej($prvek)
       {
        $this->prvky[] = $prvek;
       }

    public function zobraz()
       {
       printf_r($prvky);
       }
    }

funguje mi pouze tohle

class Foo
{
    private $data = array();

    public function __construct(array $data)
    {
        $this->data = $data;
    }

    public function __get($vlastnost)
    {
        return $this->data[$vlastnost];
    }
}

$foo = new Foo(array("bar" => "baz"));
echo $foo->bar; // vypíše baz

Ja si myslím, že musím mít něco špatně nastavené v php.ini nebo tak... V obou nefunkčních případech mi vyjede prazdna stranka bez chyboveho hlašení. Prostě jenom bílo. A nevím kde se mam podívat do logu, co po mě to phpko vlastně chce a proč to nezobrazuje.

 
Odpovedať
12.10.2015 9:00
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 41.