Autor Zpráva
obi
Profil *
Ahoj,
nedávno jste mi poradili, abych se podíval na namespaces. A tak zkouším a už mám první problém :-)

<?php
namespace Web;

const ADDRESS = "http://".$_SERVER["HTTP_HOST"];

function helloWorld(){
            echo "Hello world!";
}
?>


hlásí chybu Parse error: syntax error, unexpected '.', expecting ',' or ';' ... on line 4. Dokonce i když dám
const ADDRESS = "ahoj"."bla";


tak hlásí chybu stejnou. To vypadá jakoby PHP neumělo spojit dva řetězce :-( Nevíte prosím co s tím?
Pouštím to na localhostu s PHP 5.3.1. Díky
Alphard
Profil
The value must be a constant expression, not (for example) a variable, a property, a result of a mathematical operation, or a function call.
manuál

Navíc takto se konstanta zapisuje uvnitř třídy. Klasická konstanta pomocí define, jestli lze tam spojovat řetězce se nejsem jistý.
obi
Profil *
metodou pokus/omyl jsem zjistil, že přes define konstanty do namespace definovat nejdou:

<?php //web.php
namespace Web;

define('ADDRESS', "ahoj");
?>


<?php //index.php 
include "web.php";

echo Web\ADDRESS;
?>


hlásí Fatal error: Undefined constant 'Web\ADDRESS' in index.php on line 4. Pomocí const to ale funguje jak má a vypíše se "ahoj". Zkoušel jsem i přidat zpětné lomítko před Web, ale výsledek je stejný.
Alphard
Profil
Omlouvám se, ten váš kód je v pořádku, neuvědomil jsem si to (Example #2 global functions/constants fallback inside a namespace). Ale jak tam dostat proměnnou nevím.

Pokud jde o define, viz http://www.php.net/manual/en/function.define.php#90282, musí se uvést namespaces. Ale jestli to vezme proměnnou vážně nevím. Jestli to vyřešíte, tak sem pak prosím napište.
__construct
Profil
obi:
Keď chceš definovať koštantu v mennom priestore musíš spraviť toto:
<?php //web.php
namespace Web;

define('Web\ADDRESS', "ahoj");
define(__NAMESPACE__ .'\ALEBO', "Takto"); //edit: doplnený preklep :-)
?>
obi
Profil
__construct: moc díky, teď už to jede tak jak potřebuju :-)
Alphard: tohle funguje už úplně bez problémů ;-)
<?php
namespace Web;

define(__NAMESPACE__.'\ADDRESS', "http://".$_SERVER["HTTP_HOST"]);
?>


EDIT: ještě bych měl otázku ke konvencím, podle konvencí by slovo "Web" mělo začínat velkým, nebo malým písmenem?
Majkl578
Profil
Alphard:
Navíc takto se konstanta zapisuje uvnitř třídy.
To není tak úplně pravda. PHP 5.3 právě umožňuje zapsat obyčejnou konstantu (ne třídy) i pomocí const:
const FOO = 'Hello';
Nicméně, problém je právě s dynamickou hodnotou, pro kterou se musí použít define. Je to zmíněno i v manuálu, Example #2 a Note pod ním.

obi:
ještě bych měl otázku ke konvencím, podle konvencí by slovo "Web" mělo začínat velkým, nebo malým písmenem?
Doporučuji stejnou konvenci jako u názvů tříd, tj PascalCase."
Alphard
Profil
Majkl578:
PHP 5.3 právě umožňuje zapsat obyčejnou konstantu (ne třídy) i pomocí const:
Viz
Omlouvám se, ten váš kód je v pořádku, neuvědomil jsem si to (Example #2 global functions/constants fallback inside a namespace).
S PHP 5.3 jsem ještě moc nepracoval, tak se omlouvám ještě jednou.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0