Home » Articole » Articole » Calculatoare » Programare » PHP » PHP: Sintaxă apelabilă de primă clasă

PHP: Sintaxă apelabilă de primă clasă

postat în: PHP 0

Sintaxa apelabilă de primă clasă este introdusă începând cu PHP 8.1.0, ca o modalitate de a crea funcții anonime din apelabile. Acesta înlocuiește sintaxa apelabilă existentă folosind șiruri de caractere și matrice. Avantajul acestei sintaxe este că este accesibilă analizei statice și utilizează domeniul de aplicare în punctul în care este achiziționat apelabilul.

Sintaxa CallableExpr(...) este folosită pentru a crea un obiect Closure din apelabil. CallableExpr acceptă orice expresie care poate fi apelată direct în gramatica PHP:

Exemplul #1 Sintaxă apelabilă simplă de primă clasă


<?php

class
Foo
{
public function method()
{}
public static function
staticmethod() {}
public function __invoke()
{}
}

$obj
= new
Foo();
$classStr
=
'Foo';
$methodStr
=
'method';
$staticmethodStr
=
'staticmethod';

$f1
=
strlen(...);
$f2
=
$obj(...);
// obiect invocabil
$f3
=
$obj->method(...);
$f4
=
$obj->$methodStr(...);
$f5
=
Foo::staticmethod(...);
$f6
=
$classStr::$staticmethodStr(...);

// apelabil tradițional folosind
șir, matrice
$f7
=
'strlen'(...);
$f8
= [$obj,
'method'](...);
$f9
= [Foo::class,
'staticmethod'](...);
?>

Nota: ... face parte din sintaxă, și nu este o omisiune.

CallableExpr(...) are aceeași semantică le fel ca Closure::fromCallable(). Adică, spre deosebire de apelabil folosind șiruri și matrice, CallableExpr(...) respectă domeniul de aplicare în punctul în care este creat:

Exemplul #2 Comparația domeniului
CallableExpr(...)
și apelabilul tradițional


<?php

class
Foo
{
public function getPrivateMethod()
{
return [$this,
'privateMethod'];
}

private function privateMethod()
{
echo __METHOD__,
"\n";
}
}

$foo
= new
Foo;
$privateMethod
=
$foo->getPrivateMethod();
$privateMethod();
// Eroare fatală: apel la metoda
privată Foo::privateMethod() din domeniul global
// Acest lucru se datorează faptului că apelul este efectuat în
afara de la Foo și vizibilitatea va fi verificată din acest punct.

class
Foo1
{
public function getPrivateMethod()
{
// Utilizează domeniul în care
este luat apelabilul.
return
$this->privateMethod(...);
// identic cu
Closure::fromCallable([$this, 'privateMethod']);
}

private function privateMethod()
{
echo __METHOD__,
"\n";
}
}

$foo1
= new
Foo1;
$privateMethod
=
$foo1->getPrivateMethod();
$privateMethod();
// Foo1::privateMethod
?>

Nota: Crearea de obiecte prin această sintaxă (de exemplu, new Foo(...)) nu este acceptată, deoarece sintaxa new Foo() nu este considerată un apel.

Nota: Sintaxa apelabilă de primă clasă nu poate fi combinată cu operatorul nullsafe. Ambele următoarele duc la o eroare la timp de compilare:


<?php
$obj?->method(...);
$obj?->prop->method(...);
?>

Sursa: PHP Manual, licența CC BY 3.0. Traducere și adaptare: Nicolae Sfetcu

Ghid WordPress pentru dezvoltatori
Ghid WordPress pentru dezvoltatori

WordPress este o platformă pentru site-uri web rapidă, fiabilă, cu facilități multiple pentru dezvoltatori și ușor de utilizat. Totusi, dezvoltatorii și beneficiarii au de multe ori nevoie să adauge funcționalități suplimentare pentru a răspunde nevoilor lor. Acest ghid oferă unele … Citeşte mai mult

Nu a fost votat 19.07 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Ghid WordPress pentru începători
Ghid WordPress pentru începători

WordPress combină simplitatea pentru utilizatorii şi editori cu complexitate suportului software pentru dezvoltatori. Acest lucru îl face mai flexibil, fiind în acelaşi timp uşor de utilizat. Simplitatea sa face posibilă instalarea şi publicarea online rapid. Nimic nu ar trebui să … Citeşte mai mult

Nu a fost votat 14.29 lei26.19 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Proiectarea, dezvoltarea şi întreţinerea siturilor web
Proiectarea, dezvoltarea şi întreţinerea siturilor web

Un ghid pentru dezvoltatorii web, cu accent pe HTML, XML, JavaScript, SQL, tehnologii web, software web, software pentru dezvoltare web, aplicaţii web, şabloane pentru aplicaţii web, AJAX, servicii web, sindicalizarea web, web design, situri web, găzduirea web, analiza siturilor web, … Citeşte mai mult

Nu a fost votat 14.29 lei57.21 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *