# PHP-hibák értelmezése

> A PHP hibatípusai (szintaktikai, végzetes, figyelmeztetés, értesítés, elavult, helyreállítható), példákkal és a hibaszintek jelentésével.

A PHP az a programnyelv, amelyen a WordPress és a WooCommerce fut. A webszerveren dolgozik: ő dolgozza fel az űrlapokat, kezeli a munkameneteket és kommunikál az adatbázissal. Ez a fejezet segít megérteni a hibaüzeneteket. A leírt eljárások haladó hibaelhárítást jelentenek, ha nem érzed biztosnak magad bennük, kérj segítséget egy WordPress- vagy WooCommerce-fejlesztőtől.

## Hol találod meg a PHP-hibákat?

- **Hibanaplók a tárhelyen.** A tárhely vezérlőpultján a „naplók” vagy „hibanaplók” résznél találod.
- **WordPress-hibakeresés.** A WordPress beépített hibakereső módja a hibákat kiírja az oldalra, és a `wp-content` mappa `debug.log` fájljába is naplózza. Élő webhelyen használat után kapcsold ki, hogy ne kerüljenek ki érzékeny adatok.
- **WooCommerce állapotnaplók.** A **WooCommerce → Állapot → Naplók** oldalon.

## A PHP hibatípusai

| Típus | Mit jelent | Megállítja a futást? |
|---|---|---|
| Szintaktikai hiba (parse error) | Elírás a kódban, például hiányzó pontosvessző vagy zárójel. | Igen, a szkript el sem indul. |
| Végzetes hiba (fatal error) | A PHP érti a kérést, de nem tudja végrehajtani, például nem létező függvényt vagy osztályt hívsz. | Igen. |
| Figyelmeztetés (warning) | Valami nincs rendben, például hiányzó fájlt akarsz beilleszteni. | Nem. |
| Értesítés (notice) | Enyhébb jelzés, például nem létező változó vagy tömbelem használata. | Nem. |
| Elavult (deprecated) | Olyan kódot használsz, amelyet a későbbi verziók már nem támogatnak. | Nem. |
| Helyreállítható hiba | Egy hiba, amelyet a kód elkap és kezel, így a futás folytatódik. | Nem, ha kezelik. |

### Szintaktikai hiba

Ez például egy téma `functions.php` fájljában fordulhat elő, ha elveszik egy zárójel:

```php
function modify_product_price_display() {
    echo 'New price: ' . wc_get_price_to_display( $product;
}
```

A függvényhívásból hiányzik a záró zárójel. A helyes változat:

```php
function modify_product_price_display() {
    echo 'New price: ' . wc_get_price_to_display( $product );
}
```

A hiba megállítja a szkriptet, a webhely akár egyáltalán nem tölt be. A hibaüzenet megmutatja a hibás fájlt és sort.

### Végzetes hiba

Okozhatja a téma, egy bővítmény, a szerverbeállítás és más is. Tipikus eset a nem létező függvény hívása:

```php
function apply_special_discount() {
    if ( is_user_logged_in() ) {
        add_discount_to_cart(10);
    }
}
add_action('woocommerce_before_cart', 'apply_special_discount');
```

Ha az `add_discount_to_cart()` függvényt sehol nem definiálták (sem a témában, sem bővítményben, sem a WooCommerce magjában), a PHP végzetes hibát jelez, és az oldal nem töltődik be. A hibaüzenet így kezdődik:

```
Fatal error: Uncaught Error: Call to undefined function add_discount_to_cart() in /path/to/your/site/wp-content/themes/your-theme/functions.php:5
```

Utána a hívási lánc (stack trace) következik, amely megmutatja, mely fájlokon és függvényeken át jutott el a futás a hibáig. A megoldás az, hogy csak létező, megfelelően definiált függvényeket használj.

### Figyelmeztetés

Például egy nem létező fájl beillesztésekor:

```php
include 'config/settings.php';
```

Ha a fájl nincs ott, a PHP figyelmeztet („failed to open stream: No such file or directory”), de a többi kód lefut. Ha a fájlra szükség van, egyes funkciók mégsem működnek majd. Javítsd az elérési utat, vagy pótold a fájlt.

### Értesítés

Például egy be nem állított változó kiírásakor:

```php
function show_discount_notice() {
    global $product;
    if ($product->is_on_sale()) {
        echo 'Sale Price: ' . $sale_price;
    }
}
```

Ha a `$sale_price` nincs beállítva, ezt kapod: `Notice: Undefined variable: sale_price`. A futás folytatódik, de a kimenet hibás lehet. Az érték helyes beállítása megszünteti az értesítést.

### Elavult függvény

Ha egy régi, lecserélt függvényt használsz (például a `woocommerce_get_product_terms` helyett ma a `wc_get_product_terms` való), a PHP naplózza:

```
Deprecated: woocommerce_get_product_terms is deprecated since version 3.0! Use wc_get_product_terms instead.
```

A kód működik, de érdemes az újabb függvényre cserélni, hogy a későbbi verziókkal is együttműködjön.

### Helyreállítható hiba

Ha például egy függvénynek rossz típusú értéket adsz át, és a hívást `try`/`catch` blokk veszi körül, a `TypeError` elkapható. A futás a hiba után is folytatódik, a hibát szépen kezelheted:

```
Error: Argument 2 passed to process_payment() must be of the type array, string given
```

## A PHP hibaszintjei

A PHP a hibákat szintekbe sorolja. Ezeket a hibakereső beállításai és a naplók is használják:

| Szint | Jelentése |
|---|---|
| `E_ERROR` | Súlyos hiba, a program azonnal megáll. |
| `E_WARNING` | Hiba, ami nem állítja meg a programot, de javítani kell. |
| `E_PARSE` | A PHP egyáltalán nem érti a kódot. |
| `E_NOTICE` | Kisebb probléma, a program tovább fut. |
| `E_CORE_ERROR`, `E_CORE_WARNING` | Mint a végzetes hiba és a figyelmeztetés, de a PHP indulásakor. |
| `E_COMPILE_ERROR`, `E_COMPILE_WARNING` | A kód futás előtti előkészítésekor talált hibák és figyelmeztetések. |
| `E_USER_ERROR`, `E_USER_WARNING`, `E_USER_NOTICE` | A programozó által szándékosan kiváltott hiba, figyelmeztetés és értesítés. |
| `E_STRICT` | Javaslat a kód jobbá és a jövőbeli PHP-verziókkal kompatibilissé tételére. |
| `E_RECOVERABLE_ERROR` | Súlyos, de a programon belül kezelhető hiba. |
| `E_DEPRECATED` | A PHP olyan részére figyelmeztet, amelyet később eltávolítanak. |
| `E_USER_DEPRECATED` | A programozó által adott figyelmeztetés elavult gyakorlatról. |
| `E_ALL` | Minden hiba és figyelmeztetés. |
