# Orjentazzjoni għall-oġġetti f'PHP

> Orjentazzjoni għall-oġġetti f'PHP: klassijiet, interfaces, traits u enums, l-għodod ġodda tal-lingwa minn PHP 8.0 sa 8.4 u r-rabta mad-deserjalizzazzjoni u mas-sigurtà.

Sors: https://phpsos.de/mt/php/objektorientierung/  
Stat: 25/10/2026  
Fornitur: PHP SOS, Għajnuna ta' emerġenza għal PHP u sigurtà tas-server. Għajnuna immedjata fuq WhatsApp: https://wa.me/491736494914?text=Bongu%20PHP%20SOS%2C%20g%C4%A7andna%20b%C5%BConn%20g%C4%A7ajnuna%20bis-server%20tal-PHP%20tag%C4%A7na.%20Kumpanija%3A%20%E2%80%A6%20Websajt%3A%20%E2%80%A6

**Fil-qosor:** Il-programmar orjentat għall-oġġetti (OOP) jiġbor id-data u l-funzjonijiet relatati f'klassijiet. PHP toffri għal dan klassijiet, klassijiet astratti, interfaces, traits u, minn PHP 8.1, enums. B'PHP 8.0 sa 8.4 żdiedu ħafna għodod tal-lingwa, pereżempju constructor promotion, `readonly`, property hooks u viżibbiltà asimmetrika. Importanti għas-sigurtà: kodiċi inkapsulat tajjeb huwa aktar faċli biex jiġi vverifikat, u l-metodi maġiċi jagħmlu d-deserjalizzazzjoni mhux sigura perikoluża. Kontra vulnerabbiltajiet fl-interpretatur bħal PHP2Shell, l-OOP ma jgħinx.

## X'jfisser programmar orjentat għall-oġġetti f'PHP

Minflok ma jintużaw funzjonijiet maħlula u varjabbli globali, klassi tiddeskrivi element tad-dinja tan-negozju: ordni, klijent, fattura. Tistabbilixxi liema data tagħmel parti minnha (proprjetajiet) u x'jista' jsir biha (metodi). Oġġett huwa eżemplar konkret ta' din il-klassi.

Għal min jieħu d-deċiżjonijiet dan għandu valur prattiku: kodiċi orjentat għall-oġġetti b'klassijiet ċari jista' jiġi ttestjat, vverifikat u mgħoddi lil fornituri tas-servizzi aħjar. Applikazzjonijiet PHP qodma magħmula minn ħafna skripts individwali b'varjabbli globali, min-naħa l-oħra, huma diffiċli biex jinżammu u suxxettibbli għal żbalji waqt l-upgrades.

Idea ċentrali hija l-inkapsulazzjoni: klassi tippubblika 'l barra biss il-metodi li l-oħrajn verament jeħtieġu u tipproteġi l-istat intern tagħha. Ordni tista' mbagħad, pereżempju, tiġi mmarkata bħala mħallsa biss permezz ta' metodu li qabel jivverifika jekk dan huwiex permess. Li regoli bħal dawn jinġabru f'post wieħed huwa wkoll qligħ għas-sigurtà.

## Il-blokok bażiċi f'ħarsa

| Blokk | Skop | Eżempju qasir |
|---|---|---|
| Klassi | pjanta għall-oġġetti b'proprjetajiet u metodi | `class Rechnung { ... }` |
| Klassi astratta | bażi komuni, ma tistax tiġi nstanzjata direttament | `abstract class Zahlart { ... }` |
| Interface | kuntratt: liema metodi klassi trid toffri | `interface Versandfaehig { ... }` |
| Trait | metodi riutilizzabbli għal klassijiet mingħajr klassi ġenitur komuni | `trait MitZeitstempel { ... }` |
| Enum | sett fiss ta' valuri permessi bħala tip proprju, minn PHP 8.1 | `enum Status { case Offen; ... }` |

Il-viżibbiltajiet (`public`, `protected`, `private`) jirregolaw min jista' jaċċessa proprjetajiet u metodi. Il-klassijiet jiġu organizzati f'namespaces u mgħobbija permezz ta' autoloader; kif dan jaħdem turi l-paġna [Namespaces u autoloading](https://phpsos.de/mt/php/namespaces-autoloading/).

## PHP modern: il-novitajiet minn 8.0 sa 8.4

L-għodod li ġejjin tal-lingwa huma ddokumentati fil-manwal ta' PHP jew fl-avviżi tar-rilaxx:

| Verżjoni | Novità |
|---|---|
| 8.0 | constructor promotion, operatur nullsafe `?->`, `::class` fuq oġġetti |
| 8.1 | proprjetajiet `readonly`, enums, `new` fl-inizjalizzaturi, `final` għal kostanti tal-klassi |
| 8.2 | klassijiet `readonly`; proprjetajiet dinamiċi jitqiesu skaduti |
| 8.3 | attribut `#[\Override]`, kostanti tal-klassi tipizzati |
| 8.4 | property hooks, viżibbiltà asimmetrika, `new` mingħajr parentesi madwar |

Eżempju li jgħaqqad diversi minn dawn l-għodod:

```php
<?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,  // minn PHP 8.4
    ) {}

    public function alsBezahltMarkieren(): void
    {
        $this->status = Status::Bezahlt;
    }
}

$b = new Bestellung(42);
$b->alsBezahltMarkieren();
echo $b->status->value;              // bezahlt
$s = Status::tryFrom('storniert');   // null minflok żball
```

`readonly` jipprevjeni li l-ID tinbidel wara li tinħoloq. `private(set)` jippermetti l-qari minn barra, imma l-kitba biss fil-klassi. Assigurazzjonijiet bħal dawn fil-kodiċi jagħmlu l-iżbalji inqas probabbli li altrimenti jidhru biss fit-tħaddim. It-tipi warajhom tispjegahom il-paġna [Is-sistema tat-tipi ta' PHP](https://phpsos.de/mt/php/typsystem/).

### Nasbiet tal-upgrade f'kodiċi orjentat għall-oġġetti

Għal applikazzjonijiet eqdem, żewġ bidliet huma speċjalment rilevanti. Minn PHP 8.2.0 il-ħolqien ta' proprjetajiet dinamiċi huwa skadut, jiġifieri ta' proprjetajiet li ma humiex iddikjarati fil-klassi, sakemm il-klassi ma jkollhiex l-attribut `#[\AllowDynamicProperties]`. Kodiċi eqdem spiss juża dan mingħajr ma jinduna u mbagħad jimla l-logs b'noti. Barra minn hekk, proprjetajiet tipizzati jridu, skont il-manwal, jiġu inizjalizzati qabel l-ewwel qari, inkella PHP jitfa' `Error`.

L-attribut `#[\Override]` minn PHP 8.3 huwa utli: jimmarka metodu bħala sostituzzjoni ta' metodu tal-ġenitur. Jekk dan il-metodu ma jibqax jeżisti, pereżempju wara bidla ta' isem f'librerija, PHP jirrapporta żball minflok ma jħalli l-metodu jaħdem b'mod siekta fil-vojt. Verifiki bħal dawn jagħmlu l-upgrades aktar ippjanabbli; għal proġetti qodma mwaqqfa, [il-migrazzjoni tagħna lejn verżjoni appoġġata ta' PHP](https://phpsos.de/mt/leistungen/php-migration-legacy/) tgħin.

## Oġġetti u memorja

L-oġġetti f'PHP jiġu mgħoddija permezz ta' identifikaturi (handles). Jekk oġġett jingħadda lil funzjoni, din taħdem bl-istess oġġett, mhux b'kopja. Dan huwa effiċjenti, imma faċilment iwassal għal referenzi ċirkulari, pereżempju meta ordni tkun taf il-pożizzjonijiet tagħha u kull pożizzjoni tkun taf mill-ġdid l-ordni tagħha. Ċikli bħal dawn l-għadd tar-referenzi waħdu ma jnaddafhomx; għal dan PHP għandu Garbage Collector proprju. Id-dettalji jinsabu fil-paġna [Amministrazzjoni tal-memorja f'PHP](https://phpsos.de/mt/php/speicherverwaltung/).

## OOP u sigurtà: metodi maġiċi u deserjalizzazzjoni

PHP jaf metodi maġiċi li jissejħu awtomatikament, bħal `__construct`, `__destruct`, `__toString`, `__get` jew `__wakeup`. Dan huwa prattiku, imma għandu naħa mudlama: meta applikazzjoni tittrasforma data barranija f'oġġetti b'`unserialize()`, attakkant jista' jiddetermina liema klassijiet jinħolqu u b'hekk iqajjem kodiċi eżistenti f'metodi maġiċi. Kif dan jiġi evitat tiddeskrivih il-gwida [Deserjalizzazzjoni mhux sigura f'PHP](https://phpsos.de/mt/ratgeber/deserialisierung-php/). Fil-qosor: għall-iskambju tad-data użaw `json_encode()` u `json_decode()` u uża `unserialize()` biss għal data proprja u affidabbli, idealment bl-għażla `allowed_classes`.

Fil-każ ta' PHP2Shell, kodiċi tajjeb orjentat għall-oġġetti, min-naħa l-oħra, ma jgħinx. CVE-2026-109618 u CVE-2026-109619 jinsabu fl-interpretatur, u b'mod_php, skont it-tim ta' PHP, intwera exploit qabel ma jaħdem il-kodiċi tal-applikazzjoni. Obbligatorju huwa l-aġġornament għal PHP 8.5.12, 8.4.27, 8.3.36 jew 8.2.35 u r-restart tal-proċessi kollha ta' PHP.

## Kif jgħin PHP SOS konkretament?

- Nevalwaw l-istruttura tal-applikazzjoni tagħkom u nuru liema partijiet jagħmlu l-upgrade għal verżjoni appoġġata ta' PHP aktar diffiċli.
- Infittxu b'mod immirat mudelli riskjużi bħal `unserialize()` fuq data barranija u metodi maġiċi perikolużi.
- Niċċekkjaw żviluppi proprji bħala parti minn [awditu tas-sigurtà u test ta' penetrazzjoni](https://phpsos.de/mt/leistungen/sicherheitsaudit-penetrationstest/).
- Napplikaw l-aġġornament ta' PHP, nerġgħu nibdew il-workers kollha u nittestjaw l-applikazzjoni wara.


## Mistoqsijiet frekwenti

**PHP hija lingwa orjentata għall-oġġetti?**  
PHP tappoġġa kemm kodiċi proċedurali kif ukoll orjentat għall-oġġetti. Frameworks, qlub ta' CMS u sistemi ta' ħwienet illum madankollu huma l-aktar mibnija b'mod orjentat għall-oġġetti, b'klassijiet, interfaces u namespaces.

**X'inhi d-differenza bejn interface u klassi astratta?**  
Interface tiddeskrivi biss liema metodi klassi trid toffri. Klassi astratta tista' tkun fiha wkoll kodiċi u proprjetajiet, imma ma tistax tiġi nstanzjata direttament. Klassi tista' jkollha diversi interfaces, imma klassi ġenitur waħda biss.

**Minn meta teżisti enum f'PHP?**  
L-enumerazzjonijiet daħlu b'PHP 8.1. Jissostitwixxu kollezzjonijiet ta' kostanti b'tip proprju li jippermetti biss il-każijiet iddefiniti. Backed enums għandhom ukoll valur int jew string.

**Għaliex il-metodi maġiċi huma rilevanti għas-sigurtà?**  
Metodi bħal __destruct jew __wakeup PHP isejjaħhom awtomatikament, pereżempju meta data tiġi deserjalizzata. Jekk data barranija tidħol mingħajr verifika f'unserialize(), dan jista' jqajjem proċessi mhux mistennija fi klassijiet eżistenti.

## Sorsi

- [Manwal ta' PHP: Klassijiet u oġġetti, bażi](https://www.php.net/manual/de/language.oop5.basic.php)
- [Manwal ta' PHP: Proprjetajiet](https://www.php.net/manual/en/language.oop5.properties.php)
- [Manwal ta' PHP: Viżibbiltà](https://www.php.net/manual/en/language.oop5.visibility.php)
- [Rilaxx ta' PHP 8.1](https://www.php.net/releases/8.1/en.php)
