Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP 5.3 i kłopoty z "magicznymi funkcjami"
Forum PHP.pl > Forum > PHP
tomek_k3net
Witam,

mam kłopot z aplikacją zbudowaną na PHP wykorzystującą "magiczne funkcje", które są podobno wyłączone w PHP5.3 (na PHP5.2 działa podobno ta aplikacja), które jest załadowane do apacha w suse 11.2 czy da się przywrócić funkcjonalności PHP z wcześniejszego wydania (5.2)?

Pozdrawiam
Tomek

Crozin
Nie widzę w changelogu by w wersji 5.3 usunięto jakieś magiczne funkcje, więc napisz może co masz na myśli/podaj przykład niedziałającego kodu.
tomek_k3net
Cytat(Crozin @ 11.02.2010, 20:50:05 ) *
Nie widzę w changelogu by w wersji 5.3 usunięto jakieś magiczne funkcje,


Dokładnie mam taki komunikat

php symfony doctrine:build-all-reload-test-all

This command will remove all data in your database.
Are you sure you want to proceed? (y/N)

y
>> doctrine dropping databases
>> doctrine Successfully dropped database f...
>> doctrine creating databases
>> doctrine Successfully created database f...
>> doctrine generating model classes
>> doctrine generating sql for models
PHP Fatal error: Method StructuresAddresses::__tostring() cannot take arguments in /home/ekocrm/lib/model/doctrine/StructuresAddresses.class.php on line 12

Fatal error: Method StructuresAddresses::__tostring() cannot take arguments in /home/ekocrm/lib/model/doctrine/StructuresAddresses.class.php on line 12



kod wygląda na poprawny i osoby instalujące ten program twierdzą, że pod php5.2 działa

  1. class StructuresAddresses extends BaseStructuresAddresses {
  2. public function __toString($delim = ', ', $streetOnly = false) {
  3. if ($streetOnly) {
  4. return sprintf("ul. %s %s", $this->getAddressStreet(), $this->getAddressNo());
  5. }
  6. return sprintf("ul. %s %s%s%s %s", $this->getAddressStreet(), $this->getAddressNo(), $delim, $this->getAddressPostcode(), $this->getAddressCity());
  7. }
  8. }

tomek_k3net
tak wiem ale było kombinowane na wszystkie (jak mi się wydaje) sposoby z przekazywaniem tych danych i nic
phpion
No ale przecież nie masz co kombinować. Metoda nie może przyjąć parametrów i tyle, kropka. To tak jakbyś kombinował jak rozszerzyć klasę oznaczą final. Nie da się. Zrób sobie osobną metodę do zwracana obiektu w formie stringu z/bez ulicy. Możesz również na upartego wstawić składowe:

  1. class StructuresAddresses extends BaseStructuresAddresses {
  2. public $streetOnly = false;
  3. public $delim = ', ';
  4.  
  5. public function __toString() {
  6. if ($this->streetOnly) {
  7. return sprintf("ul. %s %s", $this->getAddressStreet(), $this->getAddressNo());
  8. }
  9. return sprintf("ul. %s %s%s%s %s", $this->getAddressStreet(), $this->getAddressNo(), $this->delim, $this->getAddressPostcode(), $this->getAddressCity());
  10. }
  11. }


i za ich pomocą kontrolować co się dzieje w __toString(). Jednak moim zdaniem to głupota.
wookieb
Nie to nie jest do końca głupota. Skorowszystkie parametry przyjmują wartości domyślne to spoko.
Faktycznie na php 5.3 to nie działa, natomiast na php 5.2.6 już tak.

Pozostaje albo zrezygnować z php 5.3 albo z doctrine.
tomek_k3net
Cytat(wookieb @ 12.02.2010, 10:38:44 ) *
Pozostaje albo zrezygnować z php 5.3 albo z doctrine.


Padło na 5.3 zostało zastąpione php5.2.
Dzięki za pomoc

Pozdrawiam
Tomek
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.