Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Bład unexpected T_FUNCTION
Forum PHP.pl > Forum > Przedszkole
arzach
Witam analizuje sobie przykłady z książki PHP. Obiekty, wzorce, narzędzia. Wydanie III
I przy analizie kodu napotkałem na błąd
Kod
Parse error: syntax error, unexpected T_FUNCTION in C:\Program Files (x86)\WebServ\httpd-users\test\listing04.18.php on line 7

Kod closures.php
  1. class Product {
  2. public $name;
  3. public $price;
  4. function __construct( $name, $price ) {
  5. $this->name = $name;
  6. $this->price = $price;
  7. }
  8. }
  9.  
  10. class ProcessSale {
  11. private $callbacks;
  12.  
  13. function registerCallback( $callback ) {
  14. if ( ! is_callable( $callback ) ) {
  15. throw new Exception( "niepoprawne wywoĹ_anie zwrotne" );
  16. }
  17. $this->callbacks[] = $callback;
  18. }
  19.  
  20. function sale( $product ) {
  21. print "{$product->name}: processing \n";
  22. foreach ( $this->callbacks as $callback ) {
  23. call_user_func( $callback, $product );
  24. }
  25. }
  26. }


i listing04.18.php
  1. require_once( "closures.php" );
  2.  
  3. class Totalizer {
  4. static function warnAmount( $amt ) {
  5. $count=0;
  6. return function( $product ) use ( $amt, &$count ) {
  7. $count += $product->price;
  8. print " suma: $count\n";
  9. if ( $count > $amt ) {
  10. print " drogo: {$count}\n";
  11. }
  12. }
  13. }
  14. }
  15.  
  16. $processor = new ProcessSale();
  17. $processor->registerCallback( Totalizer::warnAmount( 8) );
  18.  
  19. $processor->sale( new Product( "buty", 6 ) );
  20. print "\n";
  21. $processor->sale( new Product( "kawa", 6 ) );


Proszę o pomoc jak to naprawić oraz proszę o wytłumaczenie co znaczy taki zapis kodu
  1. return function( $product ) use ( $amt, &$count )
i co oznacza to use ponieważ pierwszy raz spotykam się z takim zapisem.
Daiquiri
Parse error...? Mogłeś wkleić cały komunikat błędu. Za błędy tego typu tematy zostają zamknięte. Pozwolę sobie jednak go zostawić, z racji innych (błędów, problemów). Znajdź okolice linijki w której masz błąd i dokładnie ją przejrzyj pod kątem tego co jest "expecting".
arzach
Przepraszam wkleiłem już cały kod błędu w pierwszym poście.

Zrobiłem dla testów taki kod
  1. function test($product, $amt) {
  2.  
  3. $count=0;
  4. return function( $product ) use ( $amt, &$count ) {
  5. $count += $product;
  6. print " suma: $count\n";
  7. if ( $count > $amt ) {
  8. print " drogo: {$count}\n";
  9. }
  10. }
  11.  
  12.  
  13. }
  14.  
  15. test(10, 10);


I też mam bład ten sam
Kod
Parse error: syntax error, unexpected T_FUNCTION in C:\Program Files (x86)\WebServ\httpd-users\test\use.php on line 5


I nie rozumiem tego zapisu kodu
  1. return function( $product ) use ( $amt, &$count ) {


czy ktoś może wytłumaczyć co znaczy i co ma robić ?
Daiquiri
Jaką masz wersję PHP? Closure smile.gif

A i jeszcze tutaj smile.gif
arzach
Mam WebServ 2.0 i jest php 5.2.5 i nowszej wersji chyba nie ma tego. Więc jaki inny serwer polecacie żeby miał najnowsza wersje php mysql questionmark.gif

Co do tych funkcji anonimowych to jeszcze o nich nie słyszałem dzięki wielkie poczytam o tym. Pierwszy raz się z nimi spotykam.
webdice
PHP to nie JavaScript nie posiada funkcji anonimowych. Nie może zwrócić funkcji w taki sposób.

  1. function A()
  2. {
  3. function B()
  4. {
  5. print 'B';
  6. }
  7.  
  8. return B();
  9. }
  10.  
  11. A();


Co do klas pamiętaj o public, protected oraz private przy metodach.

PS. Co do funkcji anonimowych sytuacja trochę się zmieniała w PHP 5.3, nie mniej jednak Twój kod nie zadziała.
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.