Yritän siis erään funktion sisällä luoda uuden olion upload-luokasta, mutta saan ilmoituksen
Fatal error: Class 'libraries\picture\upload' not found in [polku]/libraries/picture/picture.php on line 144
Riippumatta siitä laitanko require_once('upload.php'); kyseisen funktion sisään vai juuri ennen luokkaa, jossa tämä funktio sijaitsee, niin saan ilmoituksen:
Fatal error: Cannot redeclare class upload in [polku]/libraries/picture/upload.php on line 40
Kyseinen upload-luokka on siis muka joko kokonaan määrittämättä tai se on määritetty useammin kuin kerran. Laitoin funktion alkuun print_r(get_declared_classes()); eikä tuossa kohtaa todellakaan ole määritetty upload-luokkaa ja jos laitan require_once:n ennen tuota get_declared_classes niin luonnollisesti sitten haluttu luokka on määritetty.
Tuosta kyseisestä upload-luokasta ei tehdä uusia olioita missään muualla koodissa eikä sitä tiedostoakaan haeta missään muualla. Funktiota, joka luo uuden upload-olion kutsutaan kolmesti (Luodaan siis kolme oliota) yhden funktion sisällä ja tätä funktiota ei kutsuta kuin kerran. Tämän jälkeen muokkasin koodia, siten, että uusi olio luodaan tässä aiemmassa funktiossa ja käytetään tätä samaa oliota kaikilla kolmella kerralla. Näin ei tarvinnut luoda kuin yksi olio, mutta ongelma pysyi täsmälleen samanlaisena. Voiko autoloader aiheuttaa tässä jotain hämminkiä? Käytän tätä autoloaderia.
Tämä on minulle kyllä melkoinen mysteeri eikä googlekaan osannut auttaa, vaikka kuinka yritin kuvata sille tilannettani.
Tässähän on selvästi kyse siitä, että kyseisessä tiedostossa yrität käyttää nimiavaruuden libraries\picture sisällä olevaa upload-luokkaa mutta omassa tiedostossasi määrittelet luokan globaaliin nimiavaruuteen. Ongelmaan on kaksi vaihtoehtoista ratkaisua: (1) Vaihda picture.php:hen uploadin tilalle \upload eli globaalin nimiavaruuden upload-luokka. (2) Lisää upload.php nimiavaruuden määre namespace libraries\picture, jos luokka on tarkoitettu vain tuolla käytettäväksi.
Sehän ratkaisikin ongelman. Kiitos!
Aihe on jo aika vanha, joten et voi enää vastata siihen.