ugrás a tartalomhoz

Névtér probléma !

whiteman0524 · 2010. Szep. 17. (P), 21.20
Sziasztok !

Eddig nem használtam a névteret de most egy kis kód csoportosítás szempontjából jól jönne. Nem egy túl bonyolult dolog ahogy láttam, de a biztonság kedvéért elolvastam a neten vagy öt tutorialt is, kezdve a php.net-en található leírásokkal. Szóval a problémám az, hogy egyszerűen nem működik a dolog. Egyébként a legfrissebb XAMPP-al (PHP 5.3.1) próbáltam és Symfony 1.4.6-ot használok de ez utóbbi gondolom lényegtelen. Hiába csinálok egy nevter.php-t :

<?php
  namespace Nevter;
  function valami(){}


...meg egy Test.php-t :

<?php
  \Nevter\valami();


... Fatal error-t kapok, hogy "Call to undefined function Nevter\valami()". Nem véletlenül hagytam le a Test.php-ból az include, meg a reqire_once részt mert ugye Simfony-ban automatikusan importálódnak a fájlok.

Egyébként próbáltam a use Nevter as Ujnev; kombinációt is, de itt meg olyan hibákat kapok, hogy "syntax error, unexpected T_USE" és társai... Úgyhogy passzlom a dolgot, a segítséget meg előre is köszönöm.
 
1

őőő

unregistered · 2010. Szep. 18. (Szo), 02.30
lehet ezt inkább így kellene a test.php-ben:

<?php

    // a biztonság kedvéért kiírom az egészet

    require_once 'nevter.php';
    import Nevter as tetszoleges;
 
    tetszoleges::valami();
?>
2

Oda van írva

janoszen · 2010. Szep. 18. (Szo), 08.33
Oda van írva, hogy a Symfony miatt nem írta oda az include/require-ot. Egyébként nem feltétlenül kell importálni, használhatod eredeti nevén is.

Kérdésem az eredeti téma felvetőhöz: a nevter.php-t nem Nevter.php-nak kéne elnevezni? Biztos vagy benne, hogy végrehajtotta az include-ot? (Ronda megoldásnak irass ki include-kor valamit és nyomj egy exitet.)
3

Mindkettőt kipróbáltam

whiteman0524 · 2010. Szep. 18. (Szo), 10.11
Kipróbáltam unregistered importos megoldását, abban az esetben "syntax error, unexpected T_STRING"-es hibaüzenetet kapok a sorra. Aztán megpróbáltam átnevezni a nevter.php-t Nevter.php-nak de az se használt. Egyébként meg a tutorialokban amiket a neten találtam ott is mindig más és más neve volt magának a .php fájlnak és benne a névtérnek, szóval ez nem is kéne hogy problémát okozzon.

Az importálásban meg biztos vagyok. MIvel minden más esetben, amikor nem névtereket használok jól működik a dolog. A Symfony automatikusan beimportálja az azonos könyvtárban levő fájlokat, plusz az esetleges gyermekkönyvtárakat is. De az egyszerűség kedvéért én ugyan abba a mappába tettem a két teszt fájlt, de így se működnek. Tehát nem az importálással van a baj.

Nem tudom mi lehet a gond :(
4

Ne feltételezz!

janoszen · 2010. Szep. 18. (Szo), 13.37
A hibakeresés első számú szabálya: ne feltételezz! Próbáld ki, hogy TÉNYLEG beimportálja-e. Tedd bele az echot, sosem tudhatod, nem egy rejtett szoftver bugra futottál-e rá. Abban sem lehetsz biztos, hogy a Symphony nem a Test.php-t importálja előbb, majd csak utána a névteret definiáló nevter.php-t. (Ez pl egy logikus magyarázat lenne.)
5

Igazad lehet

whiteman0524 · 2010. Szep. 18. (Szo), 14.20
Viszont nem tudom hogy írathatnám ki hogy mi importálódik, meg esetleg azoknak a sorrendjét... Azt se tudom hogy a Symfony hol valósítja meg ezeknek a fájloknak az importálását...
6

Echo

janoszen · 2010. Szep. 18. (Szo), 14.49
Echozz ki valamit vagy syslog hívással írd rendszernaplóba. Mindezt a fájlok elején.
7

Bocs de nem értem...

whiteman0524 · 2010. Szep. 18. (Szo), 18.00
Biztos nagyon értetlen vagyok, de nem tudom mit kéne kiíratnom. Attól mert "valamit" kiíratok nem fogom látni csak azt amit éppen kiírattam. Ki is próbáltam. Ha esetleg tudnál egy konkrét példát mutatni, hogy mire gondoltál, az jó lenne :)
10

Teszt

janoszen · 2010. Szep. 18. (Szo), 22.57
nevter.php:

<?php
  namespace Nevter;
  \echo("nevter.php\n");
  function valami(){}
Test.php:

<?php
  echo("Test.php\n");
  \Nevter\valami();
Ha ezt látod:

Test.php
Fatal error...


akkor nem töltötte be a nevter.php-t a Test.php előtt. Ergó marad a manuális import vagy nem közvetlenül hívod meg.
12

Kipróbáltam...

whiteman0524 · 2010. Szep. 19. (V), 02.25
...és Fatal Errort kaptam. Aztán megpróbáltam a manuális importot, de akkor meg hibák tömkelegét kaptam + a Fatal Errort :D Tehát amit ebből sikerült idáig leszűrnöm : Symfony-ban ne akarj névtereket használni :D Csak azt nem hiszem el, hogy másnak nem volt ilyen jellegű problémája mint nekem. Kerestem a Googleal a symfony namespace issue, meg problem, meg error és társai kifejezésekre, de szinte semmit se találtam. Sőt, semmit se találtam. Nem létezik, hogy csak nekem akadt ezzel idáig problémám...
13

Meg lehetne találni

janoszen · 2010. Szep. 19. (V), 08.14
Bizonyára meg lehetne találni a hibát. Ha fölteszed valahová az egész kócerájt, megnézem Neked szívesen. Egyébként az a véleményem, hogy egy olyan redszerben, ami nem namespacekre épül tényleg ne akarj ilyet használni.
14

Igen igazad van

whiteman0524 · 2010. Szep. 19. (V), 11.39
Talán jobban járok ha ezt most inkább nem :) A kód meg nem ér annyit hogy most feltegyem valahová. Egyébként is még csak gondolkodok valamin. Hogy hogyan lehetne egy problémát a legszebben megoldani, és ennek kapcsán kipróbáltam volna a névtereket is. Szóval még csak tervezgetek, semmi konkrét elgondolás nincs. Azért kellett volna a névtér, mert szükségem lenne egy hivatkozási pontra, ahol/amiben változókat, meg esetleg függvényeket tömörítek, a jobb logikai csoportosítás miatt. De végül is ez megoldható osztályokkal is, tehát annyira nem élet halál kérdése most ez az egész névtér dolog.

A segítséget még egyszer köszönöm, mindenkinek. Majd nemsokára jön a Symfony 2.0, hátha abban már nem lesznek ilyen gondok :)
15

Vissza az alapokhoz

Ifju · 2010. Szep. 20. (H), 16.48
A Test.php-ban egész pontosan mi van? Ha csak ennyi, amennyit leírtál, és a Test.php-t hívod, akkor az édeskevés lesz, hogy működjenek a symfony feature-i.
16

Értem...

whiteman0524 · 2010. Szep. 21. (K), 11.23
Akkor várom a megoldásod :) Előre is köszi
8

arc

unregistered · 2010. Szep. 18. (Szo), 19.28
Proclub ne zavarjon hogy én meg kommentbe írtam hogy a "biztonság kedvéért" írom ki!

Whiteman: elvileg ha egybeágyazott névterek vannak, vagy import függvényt használsz vagy ha több névteret helyezel egy fileban esetleg egyedi fordítót használsz akkor hibát kaphatsz.
9

Nempara

janoszen · 2010. Szep. 18. (Szo), 22.54
Az infód idejét múlt, lehet több névteret tenni egy fájlba. Pont a multkor írtam egy ilyen kódot.
11

rendben

unregistered · 2010. Szep. 18. (Szo), 23.06
Ok főnök, akkor azt kihúzhatjuk a listáról.