Klasa XoopsObject
Klasa XoopsObject jest fundamentalną klasą bazową dla wszystkich obiektów danych w systemie XOOPS. Zapewnia standardowy interfejs do zarządzania właściwościami obiektów, walidacji, śledzenia zmian i serializacji.
Przegląd Klasy
Dział zatytułowany „Przegląd Klasy”namespace Xoops\Core;
class XoopsObject{ protected array $vars = []; protected array $cleanVars = []; protected bool $isNew = true; protected array $errors = [];}Hierarchia Klas
Dział zatytułowany „Hierarchia Klas”XoopsObject├── XoopsUser├── XoopsGroup├── XoopsModule├── XoopsBlock├── XoopsComment├── XoopsNotification├── XoopsConfig└── [Custom Module Objects]Właściwości
Dział zatytułowany „Właściwości”| Właściwość | Typ | Widoczność | Opis |
|---|---|---|---|
$vars | array | protected | Przechowuje definicje zmiennych i wartości |
$cleanVars | array | protected | Przechowuje oczyśczone wartości do operacji bazy danych |
$isNew | bool | protected | Wskazuje, czy obiekt jest nowy (jeszcze nie w bazie danych) |
$errors | array | protected | Przechowuje komunikaty walidacji i błędów |
Konstruktor
Dział zatytułowany „Konstruktor”public function __construct()Tworzy nową instancję XoopsObject. Obiekt jest domyślnie oznaczony jako nowy.
Przykład:
$object = new XoopsObject();// Obiekt jest nowy i nie ma zdefiniowanych zmiennychMetody Podstawowe
Dział zatytułowany „Metody Podstawowe”initVar
Dział zatytułowany „initVar”Inicjalizuje definicję zmiennej dla obiektu.
public function initVar( string $key, int $dataType, mixed $value = null, bool $required = false, int $maxlength = null, string $options = ''): voidParametry:
| Parametr | Typ | Opis |
|---|---|---|
$key | string | Nazwa zmiennej |
$dataType | int | Stała typu danych (patrz Typy Danych) |
$value | mixed | Wartość domyślna |
$required | bool | Czy pole jest wymagane |
$maxlength | int | Maksymalna długość dla typów string |
$options | string | Dodatkowe opcje |
Typy Danych:
| Stała | Wartość | Opis |
|---|---|---|
XOBJ_DTYPE_TXTBOX | 1 | Wejście pola tekstowego |
XOBJ_DTYPE_TXTAREA | 2 | Zawartość obszaru tekstowego |
XOBJ_DTYPE_INT | 3 | Wartość liczby całkowitej |
XOBJ_DTYPE_URL | 4 | String URL |
XOBJ_DTYPE_EMAIL | 5 | Adres poczty e-mail |
XOBJ_DTYPE_ARRAY | 6 | Serializowana tablica |
XOBJ_DTYPE_OTHER | 7 | Typ niestandardowy |
XOBJ_DTYPE_SOURCE | 8 | Kod źródłowy |
XOBJ_DTYPE_STIME | 9 | Format czasu krótki |
XOBJ_DTYPE_MTIME | 10 | Format czasu średni |
XOBJ_DTYPE_LTIME | 11 | Format czasu długi |
XOBJ_DTYPE_FLOAT | 12 | Liczba zmiennoprzecinkowa |
XOBJ_DTYPE_DECIMAL | 13 | Liczba dziesiętna |
XOBJ_DTYPE_ENUM | 14 | Wyliczenie |
Przykład:
class MyObject extends XoopsObject{ public function __construct() { parent::__construct(); $this->initVar('id', XOBJ_DTYPE_INT, null, false); $this->initVar('title', XOBJ_DTYPE_TXTBOX, '', true, 255); $this->initVar('content', XOBJ_DTYPE_TXTAREA, '', false); $this->initVar('email', XOBJ_DTYPE_EMAIL, '', true, 100); $this->initVar('created', XOBJ_DTYPE_INT, time(), false); $this->initVar('status', XOBJ_DTYPE_INT, 1, true); }}Ustawia wartość zmiennej.
public function setVar( string $key, mixed $value, bool $notGpc = false): boolParametry:
| Parametr | Typ | Opis |
|---|---|---|
$key | string | Nazwa zmiennej |
$value | mixed | Wartość do ustawienia |
$notGpc | bool | Jeśli true, wartość nie pochodzi z GET/POST/COOKIE |
Zwraca: bool - True jeśli pomyślnie, false w innym wypadku
Przykład:
$object = new MyObject();$object->setVar('title', 'Hello World');$object->setVar('content', '<p>Content here</p>', true); // Not from user input$object->setVar('status', 1);Pobiera wartość zmiennej z opcjonalnym formatowaniem.
public function getVar( string $key, string $format = 's'): mixedParametry:
| Parametr | Typ | Opis |
|---|---|---|
$key | string | Nazwa zmiennej |
$format | string | Format wyjściowy |
Opcje Formatu:
| Format | Opis |
|---|---|
's' | Pokaż - Jednostki HTML wyjście dla wyświetlania |
'e' | Edytuj - Dla wartości wejścia formularza |
'p' | Podgląd - Podobnie do pokaż |
'f' | Dane formularza - Surowe dla przetwarzania formularza |
'n' | Brak - Surowa wartość, bez formatowania |
Zwraca: mixed - Sformatowana wartość
Przykład:
$object = new MyObject();$object->setVar('title', 'Hello <World>');
echo $object->getVar('title', 's'); // "Hello <World>"echo $object->getVar('title', 'e'); // "Hello <World>" (for input value)echo $object->getVar('title', 'n'); // "Hello <World>" (raw)
// Dla typów danych tablica$object->setVar('options', ['a', 'b', 'c']);$options = $object->getVar('options', 'n'); // Returns arraysetVars
Dział zatytułowany „setVars”Ustawia wiele zmiennych naraz z tablicy.
public function setVars( array $values, bool $notGpc = false): voidParametry:
| Parametr | Typ | Opis |
|---|---|---|
$values | array | Tablica asocjacyjna par klucz => wartość |
$notGpc | bool | Jeśli true, wartości nie pochodzą z GET/POST/COOKIE |
Przykład:
$object = new MyObject();$object->setVars([ 'title' => 'My Title', 'content' => 'My content', 'status' => 1]);
// Z bazy danych (nie dane użytkownika)$object->setVars($row, true);getValues
Dział zatytułowany „getValues”Pobiera wszystkie wartości zmiennych.
public function getValues( array $keys = null, string $format = 's', int $maxDepth = 1): arrayParametry:
| Parametr | Typ | Opis |
|---|---|---|
$keys | array | Konkretne klucze do pobrania (null dla wszystkich) |
$format | string | Format wyjściowy |
$maxDepth | int | Maksymalna głębia dla zagnieżdżonych obiektów |
Zwraca: array - Tablica asocjacyjna wartości
Przykład:
$object = new MyObject();
// Pobierz wszystkie wartości$allValues = $object->getValues();
// Pobierz określone wartości$subset = $object->getValues(['title', 'status']);
// Pobierz surowe wartości dla bazy danych$rawValues = $object->getValues(null, 'n');assignVar
Dział zatytułowany „assignVar”Przypisuje wartość bezpośrednio bez walidacji (ostrożnie).
public function assignVar( string $key, mixed $value): voidParametry:
| Parametr | Typ | Opis |
|---|---|---|
$key | string | Nazwa zmiennej |
$value | mixed | Wartość do przypisania |
Przykład:
// Bezpośrednie przypisanie ze zaufanego źródła (np. baza danych)$object->assignVar('id', $row['id']);$object->assignVar('created', $row['created']);cleanVars
Dział zatytułowany „cleanVars”Oczyszcza wszystkie zmienne do operacji bazy danych.
public function cleanVars(): boolZwraca: bool - True jeśli wszystkie zmienne są ważne
Przykład:
$object = new MyObject();$object->setVar('title', 'Test');$object->setVar('email', 'user@example.com');
if ($object->cleanVars()) { // Zmienne są oczyśczone i gotowe do bazy danych $cleanData = $object->cleanVars;} else { // Błędy walidacji $errors = $object->getErrors();}Sprawdza lub ustawia czy obiekt jest nowy.
public function isNew(): boolpublic function setNew(): voidpublic function unsetNew(): voidPrzykład:
$object = new MyObject();echo $object->isNew(); // true
$object->unsetNew();echo $object->isNew(); // false
$object->setNew();echo $object->isNew(); // trueMetody Obsługi Błędów
Dział zatytułowany „Metody Obsługi Błędów”setErrors
Dział zatytułowany „setErrors”Dodaje komunikat błędu.
public function setErrors(string|array $error): voidPrzykład:
$object->setErrors('Title is required');$object->setErrors(['Field 1 error', 'Field 2 error']);getErrors
Dział zatytułowany „getErrors”Pobiera wszystkie komunikaty błędów.
public function getErrors(): arrayPrzykład:
$errors = $object->getErrors();foreach ($errors as $error) { echo $error . "\n";}getHtmlErrors
Dział zatytułowany „getHtmlErrors”Zwraca błędy sformatowane jako HTML.
public function getHtmlErrors(): stringPrzykład:
if (!$object->cleanVars()) { echo '<div class="error">' . $object->getHtmlErrors() . '</div>';}Metody Narzędziowe
Dział zatytułowany „Metody Narzędziowe”toArray
Dział zatytułowany „toArray”Konwertuje obiekt do tablicy.
public function toArray(): arrayPrzykład:
$object = new MyObject();$object->setVar('title', 'Test');$data = $object->toArray();// ['title' => 'Test', ...]getVars
Dział zatytułowany „getVars”Zwraca definicje zmiennych.
public function getVars(): arrayPrzykład:
$vars = $object->getVars();foreach ($vars as $key => $definition) { echo "Field: $key, Type: {$definition['data_type']}\n";}Kompletny Przykład Użycia
Dział zatytułowany „Kompletny Przykład Użycia”<?php/** * Niestandardowy Obiekt Artykułu */class Article extends XoopsObject{ /** * Konstruktor - Inicjalizuj wszystkie zmienne */ public function __construct() { parent::__construct();
// Klucz podstawowy $this->initVar('article_id', XOBJ_DTYPE_INT, null, false);
// Wymagane pola $this->initVar('title', XOBJ_DTYPE_TXTBOX, '', true, 255); $this->initVar('author_id', XOBJ_DTYPE_INT, 0, true);
// Pola opcjonalne $this->initVar('summary', XOBJ_DTYPE_TXTAREA, '', false); $this->initVar('content', XOBJ_DTYPE_TXTAREA, '', false); $this->initVar('category_id', XOBJ_DTYPE_INT, 0, false);
// Znaczniki czasu $this->initVar('created', XOBJ_DTYPE_INT, time(), false); $this->initVar('updated', XOBJ_DTYPE_INT, time(), false);
// Flagi statusu $this->initVar('published', XOBJ_DTYPE_INT, 0, false); $this->initVar('views', XOBJ_DTYPE_INT, 0, false);
// Metadane jako tablica $this->initVar('meta', XOBJ_DTYPE_ARRAY, [], false); }
/** * Pobierz sformatowaną datę utworzenia */ public function getCreatedDate(string $format = 'Y-m-d H:i:s'): string { return date($format, $this->getVar('created', 'n')); }
/** * Sprawdź czy artykuł jest opublikowany */ public function isPublished(): bool { return $this->getVar('published', 'n') == 1; }
/** * Zwiększ licznik wyświetleń */ public function incrementViews(): void { $views = $this->getVar('views', 'n'); $this->setVar('views', $views + 1); }
/** * Niestandardowa walidacja */ public function validate(): bool { $this->errors = [];
// Walidacja tytułu $title = trim($this->getVar('title', 'n')); if (empty($title)) { $this->setErrors('Title is required'); } elseif (strlen($title) < 5) { $this->setErrors('Title must be at least 5 characters'); }
// Walidacja autora if ($this->getVar('author_id', 'n') <= 0) { $this->setErrors('Author is required'); }
return empty($this->errors); }}
// Użycie$article = new Article();$article->setVar('title', 'My First Article');$article->setVar('author_id', 1);$article->setVar('content', '<p>Article content here...</p>', true);$article->setVar('meta', [ 'keywords' => ['xoops', 'cms', 'php'], 'description' => 'An example article']);
if ($article->validate() && $article->cleanVars()) { // Zapisz do bazy danych za pomocą handlera $handler = xoops_getModuleHandler('article', 'mymodule'); $handler->insert($article);
echo "Article saved with ID: " . $article->getVar('article_id');} else { echo "Errors: " . $article->getHtmlErrors();}Najlepsze Praktyki
Dział zatytułowany „Najlepsze Praktyki”-
Zawsze Inicjalizuj Zmienne: Zdefiniuj wszystkie zmienne w konstruktorze używając
initVar() -
Używaj Odpowiednich Typów Danych: Wybierz prawidłową stałą
XOBJ_DTYPE_*do walidacji -
Obsługuj Dane Użytkownika Ostrożnie: Użyj
setVar()z$notGpc = falsedla danych użytkownika -
Waliduj Przed Zapisaniem: Zawsze wywołaj
cleanVars()przed operacjami bazy danych -
Używaj Parametrów Formatu: Użyj odpowiedniego formatu w
getVar()dla kontekstu -
Rozszerz dla Niestandardowej Logiki: Dodaj metody specyficzne dla domeny w podklasach
Powiązana Dokumentacja
Dział zatytułowany „Powiązana Dokumentacja”- XoopsObjectHandler - Wzorzec handlera do trwałości obiektów
- ../Database/Criteria - Budowanie zapytań z Criteria
- ../Database/XoopsDatabase - Operacje bazy danych
Patrz też: Kod Źródłowy XOOPS