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

Resursa esențială care te va ghida pas cu pas în lumea complexă a platformei WordPress.

Nu a fost votat 18.33 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

Descoperă arta gestionării site-urilor web cu WordPress!

Nu a fost votat Interval de prețuri: 13.74 lei până la 25.18 lei Citește mai mult
Proiectarea, dezvoltarea şi întreţinerea siturilor web
Proiectarea, dezvoltarea şi întreţinerea siturilor web

Ghidul complet pentru proiectarea, dezvoltarea și întreținerea siturilor web, o resursă indispensabilă

Nu a fost votat Interval de prețuri: 13.74 lei până la 54.99 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.


Descoperă mai multe la MultiMedia

Abonează-te ca să primești ultimele articole prin email.

Lasă un răspuns

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