Go achomair: Cuimsíonn ríomhchlárú oibiachtdhírithe (OOP) sonraí agus na feidhmeanna a bhaineann leo in aicmí. Tairgeann PHP aicmí, aicmí teibí, comhéadain, tréithe agus, ó PHP 8.1 i leith, enums chuige sin. Le PHP 8.0 go 8.4 cuireadh a lán gnéithe teanga leis, mar shampla cur chun cinn tógálaí, readonly, Property Hooks agus infheictheacht asmaitriúil. Tábhachtach don tslándáil: tá cód a bhfuil dea-chaipseallú air níos éasca a sheiceáil, agus déanann modhanna draíochta dí-shraitheadú neamhshábháilte contúirteach. I gcoinne leochaileachtaí san ateangaire ar nós PHP2Shell, ní chabhraíonn OOP.
Cad is brí le ríomhchlárú oibiachtdhírithe i PHP
In ionad feidhmeanna scaoilte agus athróga domhanda a úsáid, déanann aicme cur síos ar rud ón saol gairmiúil: ordú, custaiméir, sonraisc. Socraíonn sí na sonraí a bhaineann léi (airíonna) agus an méid is féidir a dhéanamh leo (modhanna). Is eiseamláir shonrach den aicme sin é oibiacht.
Do lucht cinnteoireachta tá luach praiticiúil leis seo: is féidir cód oibiachtdhírithe le haicmí soiléire a thástáil, a sheiceáil agus a thabhairt do sholáthraithe seirbhíse níos fearr. I gcodarsnacht leis sin, tá seanfheidhmchláir PHP déanta as go leor scripteanna aonair le hathróga domhanda deacair a chothabháil agus leochaileach d'earráidí le linn uasghráduithe.
Smaoineamh lárnach is ea an caipseallú: ní scaoileann aicme amach ach na modhanna a theastaíonn go fírinneach ó dhaoine eile, agus cosnaíonn sí a staid inmheánach. Ansin is féidir ordú a mharcáil mar íoctha, mar shampla, trí mhodh amháin a sheiceálann roimh ré an bhfuil sé sin ceadaithe ar chor ar bith. Is buntáiste don tslándáil freisin rialacha den sórt sin a chur le chéile in aon áit amháin.
Na bloic thógála i mbeagán focal
| Bloc | Cuspóir | Sampla gairid |
|---|---|---|
| Aicme | plean tógála d'oibiachtaí le hairíonna agus modhanna | class Rechnung { ... } |
| aicme theibí | bonn coiteann, ní féidir í a thionscnamh go díreach | abstract class Zahlart { ... } |
| Comhéadan | conradh: na modhanna a chaithfidh aicme a thairiscint | interface Versandfaehig { ... } |
| Tréith | modhanna in-athúsáidte d'aicmí gan tuismitheoir coiteann | trait MitZeitstempel { ... } |
| Enum | tacar seasta luachanna ceadaithe mar chineál ar leith, ó PHP 8.1 | enum Status { case Offen; ... } |
Rialaíonn infheictheachtaí (public, protected, private) cé a fhéadann rochtain a fháil ar airíonna agus ar mhodhanna. Eagraítear aicmí i spásanna ainmneacha agus luchtaítear iad trí uathluchtóir; míníonn an leathanach Spásanna ainmneacha agus uathluchtú conas a oibríonn sé sin.
PHP nua-aimseartha: na nuálaíochtaí ó 8.0 go 8.4
Tá na gnéithe teanga seo doiciméadaithe i lámhleabhar PHP nó sna fógraí eisiúna:
| Leagan | Nuálaíocht |
|---|---|
| 8.0 | cur chun cinn tógálaí, oibreoir nullsafe ?->, ::class ar oibiachtaí |
| 8.1 | airíonna readonly, enums, new in tosaitheoirí, final do thairisigh aicme |
| 8.2 | aicmí readonly; meastar go bhfuil airíonna dinimiciúla imithe i léig |
| 8.3 | tréith #[\Override], tairisigh aicme clóscríofa |
| 8.4 | Property Hooks, infheictheacht asmaitriúil, new gan lúibíní timpeall |
Sampla a chomhcheanglaíonn roinnt de na gnéithe seo:
<?php
declare(strict_types=1);
enum Status: string
{
case Offen = 'offen';
case Bezahlt = 'bezahlt';
}
final class Bestellung
{
public function __construct(
public readonly int $id,
public private(set) Status $status = Status::Offen, // ó PHP 8.4 i leith
) {}
public function alsBezahltMarkieren(): void
{
$this->status = Status::Bezahlt;
}
}
$b = new Bestellung(42);
$b->alsBezahltMarkieren();
echo $b->status->value; // bezahlt
$s = Status::tryFrom('storniert'); // null in ionad earráide
Cuireann readonly cosc ar an ID a athrú tar éis é a chruthú. Ceadaíonn private(set) léamh ón taobh amuigh, ach scríobh laistigh den aicme amháin. Déanann a leithéid de dhearbhuithe sa chód earráidí nach dtugtar faoi deara murab ionann agus le linn na hoibríochta níos dóchúla. Míníonn an leathanach Córas cineálacha PHP na cineálacha atá taobh thiar de.
Gaistí uasghráidithe i gcód oibiachtdhírithe
I gcás seanfheidhmchlár tá dhá athrú ábhartha go háirithe. Ó PHP 8.2.0 i leith meastar go bhfuil airíonna dinimiciúla a chruthú imithe i léig, is é sin airíonna nach bhfuil dearbhaithe san aicme, mura bhfuil an tréith #[\AllowDynamicProperties] ar an aicme. Úsáideann seanchód é seo go minic gan fhios agus líonann sé na logaí le leideanna dá bharr. Ina theannta sin, de réir an lámhleabhair ní mór airíonna clóscríofa a thionscnamh roimh an gcéad léamh, nó caitheann PHP Error.
Is úsáideach an tréith #[\Override] ó PHP 8.3: marcálann sí modh mar chur in ionad modha tuismitheora. Mura bhfuil an modh sin ann a thuilleadh, mar shampla tar éis athainmniú i leabharlann, tuairiscíonn PHP earráid in ionad ligean don mhodh rith go ciúin i dtreo na folmhaíochta. Fágann seiceálacha den sórt sin uasghráduithe níos inphleanáilte; i gcás seanthionscadal atá i bhfostú cabhraíonn ár n-aistriú go leagan PHP tacaithe.
Oibiachtaí agus cuimhne
Seoltar oibiachtaí ar aghaidh i PHP trí aitheantóirí (handles). Má thugann tú oibiacht d'fheidhm, oibríonn sí leis an oibiacht chéanna, ní le cóip. Tá sé sin éifeachtúil, ach cruthaíonn sé tagairtí ciorclacha go héasca, mar shampla nuair a bhfuil a míreanna ar eolas ag ordú agus gach mír ag tagairt ar ais dá hordú. Ní ghlanann áireamh tagartha ina aonar timthriallta den sórt sin; chuige sin tá bailitheoir truflais (Garbage Collector) ar leith ag PHP. Tá sonraí ar an leathanach Bainistiú cuimhne i PHP.
OOP agus slándáil: modhanna draíochta agus dí-shraitheadú
Tá modhanna draíochta ar eolas ag PHP a nglaoitear go huathoibríoch orthu, mar shampla __construct, __destruct, __toString, __get nó __wakeup. Tá sé sin áisiúil, ach tá taobh dorcha leis: nuair a athraíonn feidhmchlár sonraí coimhthíocha ar ais ina n-oibiachtaí le unserialize(), is féidir le hionsaitheoir a chinneadh cé na haicmí a thagann chun cinn agus cód atá ann cheana i modhanna draíochta a spreagadh dá bhrí sin. Déanann an treoir Dí-shraitheadú neamhshábháilte i PHP cur síos ar an gcaoi chun é sin a sheachaint. Go hachomair: úsáid json_encode() agus json_decode() don mhalartú sonraí agus úsáid unserialize() le haghaidh sonraí féin iontaofa amháin, go hidéalach leis an rogha allowed_classes.
I gcás PHP2Shell, ní chabhraíonn cód maith oibiachtdhírithe, áfach. Tá CVE-2026-109618 agus CVE-2026-109619 san ateangaire, agus i gcás mod_php léiríodh exploit, de réir fhoireann PHP, sula ritheann cód an fheidhmchláir. Is éigeantach an nuashonrú go PHP 8.5.12, 8.4.27, 8.3.36 nó 8.2.35 agus atosú gach próisis PHP.
Conas a chabhraíonn PHP SOS go praiticiúil?
- Déanaimid struchtúr d'fheidhmchláir a mheas agus léirímid na codanna a chuireann uasghrádú go leagan PHP tacaithe i bhfad níos deacra.
- Lorgaimid go sonrach patrúin atá ina riosca ar nós
unserialize()ar shonraí coimhthíocha agus modhanna draíochta contúirteacha. - Seiceálaimid forbairtí féin mar chuid d'iniúchadh slándála agus tástáil threáite.
- Suiteálaimid an nuashonrú PHP, atosaímid gach oibrí agus déanaimid tástáil ar an bhfeidhmchlár ina dhiaidh.
Ceisteanna coitianta
An teanga oibiachtdhírithe é PHP?
Tacaíonn PHP le cód nós imeachta agus le cód oibiachtdhírithe araon. Inniu, áfach, tá creataí, croíthe CMS agus córais siopaí tógtha den chuid is mó ar bhonn oibiachtdhírithe, le haicmí, comhéadain agus spásanna ainmneacha.
Cad é an difríocht idir comhéadan agus aicme teibí?
Ní chuireann comhéadan síos ach ar na modhanna a chaithfidh aicme a thairiscint. Is féidir cód agus airíonna a bheith in aicme theibí cheana féin, ach ní féidir í a thionscnamh go díreach. Is féidir roinnt comhéadan a bheith ag aicme, ach aon tuismitheoir amháin.
Cathain a tháinig enums chun cinn i PHP?
Tháinig áireamháin le PHP 8.1. Cuireann siad cineál ar leith in ionad bailiúchán tairiseach, nach gceadaíonn ach na cásanna sainithe. Tá luach int nó string ag Backed Enums ina theannta sin.
Cén fáth a bhfuil modhanna draíochta ábhartha don tslándáil?
Glaonn PHP modhanna ar nós __destruct nó __wakeup go huathoibríoch, mar shampla agus sonraí á ndí-shraitheadú. Má théann sonraí coimhthíocha isteach in unserialize() gan seiceáil, d'fhéadfadh sé sin sreabhadh gan súil leis a spreagadh in aicmí atá ann cheana.