[ Ajvan @ 18.08.2010. 08:57 ] @
Pozdrav,
radim na nekom test projektu i zaglavljen sam vec par dana jer ne mogu da resim jedan problem.
Imam html formu koja na submit poziva javascript koji se nalazi u js/scripts.js putanji unutar projekta. Svi ostali php fajlovi su u root-u projekta. Funkcija unutar javascript-a koristi ajax poziv (jquery) i kao url parametar prima naziv php skripta koga poziva (phpScript.php). Taj php skript include-uje na pocetku php klasu (someClass.php), i kada dodje do mesta gde treba da instancira objekat (tokom trace-ovanja) program prekine izvrsavanje koda u tom php fajlu (phpScript.php) i vrati se nazad. Koristim wamp server (2.0i - Apache 2.2.11 i php 5.3) za testiranje. Kada pogledam u error log Apache-a ovaj mi prijavljuje sledece:
PHP Fatal error: Class 'someClass' not found in C:\\wamp\\www\\someProject\\phpScript.php on line 12, referer: http://localhost/someProject/
IDE koji koristim je NetBeans 6.9.1 i xDebugger.
Sad sledi zanimljiviji deo price....kada sve to radim u PhpEd IDE-u i koristim njegov lokalni SRV webserver umesto ThirdParty servera sve radi i prolazi bez problema. Ima li neko ideju zasto se ne vidi someClass.php iako je uredno na putanji, proverio sam milion puta naziv klase, mala i velika slova, sve je u redu. Probao sam cak i sa __autoload funkcijom (koja u principu ne zahteva include-ovanje klase, vec kad naidje na instanciranje klase koja nije include-ovana poziva __autoload pa unutar nje dodajem klasu) i opet isto...ne vidi klasu. Stavljao sam klasu i u poseban DIR pa navodio putanju (i relativnu i apsolutnu) i opet nista.

nisam bas vest sa php-om, ali ovo je trebalo da bude ordinarna operacija i zaista vise nemam nikakvih ideja sta bi moglo da pravi problem.
hvala unapred
[ Goran Rakić @ 18.08.2010. 09:34 ] @
Ako koristiš require() za učitavanje te druge PHP datoteke koja sadrži klasu onda će ti PHP prijaviti grešku ako ne može da pronađe datoteku (neodgovarajuća putanja). Postavi i error_reporting() na E_ALL, moguće da imaš neko drugo upozorenje koje je skriveno, a koje bi ti pomoglo da rešiš problem.

Koristan savet je i da testiraš kod koji pozivaš kroz AJAX direktno, otvoriš tu stranu u pregledniku (engl. browser) ili ako je POST zahtev, napraviš formicu koja šalje podatke. Uvek se trudi da eliminišeš kompleksnost kada tražiš grešku.
[ Ajvan @ 18.08.2010. 10:06 ] @
tja, postavio sam error_reporting(E_ALL); u phpScript.php fajlu, odmah nakon include-ovanja klase. Php error log je prazan. Takodje, u php.ini fajlu belezenje gresaka je enable-ovano.
[ Ajvan @ 18.08.2010. 11:31 ] @
Ok, ajd da probamo ovako, evo kratkog skripta, obican html sa jednim dugmetom koje zove ajax. Ista prica...ako neko ima instaliran Apache samo nek doda u neki tmp projekat i proba da pokrene...Go dugme uvek vraca 'Failed', jer ne vidi klasu (trebalo bi da vraca 'Success').
[ mitke013 @ 18.08.2010. 11:44 ] @
Otvorio sam fajl someClass.php i video prvu gresku:
<? php
//someClass

Izmedju <? i php imas jedan space. Obrisi ga i probaj opet.

Btw;
ne znam za ostale, ali Phped ti odmah obelezi ovakve greske pa sam zato i primetio.
[ Ajvan @ 18.08.2010. 11:59 ] @
Da, samo sto nisam kuci pa pisem u Notepad++...u pravu si...to je samo jedna od gresaka...druga je sto prilikom inicijalizacije zovem nepostojeci konstruktor...malo sam modifikovao kod..sad radi....upload-ovao sam izmenjenu klasu, za slucaj da nekom treba...sad jos da proverim radi li stvar na test projektu....
hvala ti Mitke, ne ide mi php nikako ovih dana...
[ mitke013 @ 18.08.2010. 12:14 ] @
Nema na cemu.

Kad vec ucis, odmah kreni da radis php5. Znaci;
metode moraju biti public, protected ili private. Veruj, znaci ce ti kad pocnes da pises vece programe.

Umesto var, takodje koristi public, protected ili private. Google ce ti sve lepo objasniti.

Ukratko:
public metode cine tvoj API a protected i private metode obavljaju sav prljavi posao u pozadini.
Koristi ternary operatore. Umesto
Code:

if ($myClass->someMethod() == true) {
    echo "Initialization successfull";
    }
else {
        echo "Initialization failed";
     }    

mozes ovo
Code:

echo $myClass->someMethod() ? "Initialization successfull" : "Initialization failed" ;
[ Ajvan @ 18.08.2010. 13:00 ] @
hvala ti,
nemoj pogresno da me shvatis, bavim se programiranjem 5-6 godina, zavrsio racunarstvo na elektro fakultetu, ... ovo sa php-om je povezano sa mojim nepoznavanjem samog jezika, radim na projektu i ucim....pa onda ne pisem kako treba vec samo zurim da istestiram klasu, na najgluplji nacin. Interesuje me druga stvar, vidim da su u php 5.3 verziji neke funkcije promenjene (split se vise ne koristi nego explode na primer - apache javio gresku pa se ja sad pravim pametan :) )...da li raditi sa starijom verzijom php-a, jer kad se bude doslo do verzije koja ce ici u publish, trebalo bi proveriti koju verziju php-a podrzavaju web host provider-i...a potencijalno, moze biti problema sa nekim f-jama.
[ dakipro @ 18.08.2010. 13:23 ] @
Pa split je deprecated od sad pa nadalje i ubuduce dok ga ne iskljuce, nema razloga da ga koristis.. isto vazi i za ostale stvari koje su deprecated. U ovom slucaju Explode radi i na starijim verzijama, tako da sa tim si miran.
[ mitke013 @ 18.08.2010. 13:38 ] @
Radi za php 5.2.6-5.3.0 . Tek verzija 5.3 je resila nasledjivanje statickih metoda (i ubacila jos nekoliko lepih stvar), ali hosting kompanije se uglavnom i dalje drze 5.2.x verzije pa ces morati malo da zongliras.
[ Ajvan @ 18.08.2010. 14:03 ] @
Da, pored ispravke vezane za definisanje php tag-a, morao sam da downgrade-ujem PHP verziju na 5.2.9, zamenio deprecated metodu split sa explode....i....proradilo je...
ljudi hvala vam, pomogli ste mi da skinem jednu muku sa vrata...veselje tek sledi pretpostavaljam :)