XoopsObject שיעור
מחלקת XoopsObject היא מחלקת הבסיס הבסיסית עבור כל אובייקטי הנתונים במערכת XOOPS. הוא מספק ממשק סטנדרטי לניהול מאפייני אובייקט, אימות, מעקב מלוכלך והסדרה.
סקירת כיתה
Section titled “סקירת כיתה”namespace Xoops\Core;
class XoopsObject{ protected array $vars = []; protected array $cleanVars = []; protected bool $isNew = true; protected array $errors = [];}היררכיית מעמדות
Section titled “היררכיית מעמדות”XoopsObject├── XoopsUser├── XoopsGroup├── XoopsModule├── XoopsBlock├── XoopsComment├── XoopsNotification├── XoopsConfig└── [Custom Module Objects]מאפיינים
Section titled “מאפיינים”| נכס | הקלד | נראות | תיאור |
|---|---|---|---|
$vars | מערך | מוגן | מאחסן הגדרות וערכים משתנים |
$cleanVars | מערך | מוגן | מאחסן ערכים מחוטאים עבור פעולות מסד נתונים |
$isNew | bool | מוגן | מציין אם האובייקט חדש (עדיין לא במסד הנתונים) |
$errors | מערך | מוגן | מאחסן הודעות אימות ושגיאה |
קונסטרוקטור
Section titled “קונסטרוקטור”public function __construct()יוצר מופע חדש של XoopsObject. האובייקט מסומן כחדש כברירת מחדל.
דוּגמָה:
$object = new XoopsObject();// Object is new and has no defined variablesשיטות ליבה
Section titled “שיטות ליבה”initVar
Section titled “initVar”מאתחל הגדרת משתנה עבור האובייקט.
public function initVar( string $key, int $dataType, mixed $value = null, bool $required = false, int $maxlength = null, string $options = ''): voidפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$key | מחרוזת | שם משתנה |
$dataType | int | קבוע סוג נתונים (ראה סוגי נתונים) |
$value | מעורב | ערך ברירת מחדל |
$required | bool | האם שדה חובה |
$maxlength | int | אורך מקסימלי עבור סוגי מחרוזות |
$options | מחרוזת | אפשרויות נוספות |
סוגי נתונים:
| קבוע | ערך | תיאור |
|---|---|---|
XOBJ_DTYPE_TXTBOX | 1 | קלט תיבת טקסט |
XOBJ_DTYPE_TXTAREA | 2 | תוכן אזורי טקסט |
XOBJ_DTYPE_INT | 3 | ערך מספר שלם |
XOBJ_DTYPE_URL | 4 | מחרוזת URL |
XOBJ_DTYPE_EMAIL | 5 | כתובת דואר אלקטרוני |
XOBJ_DTYPE_ARRAY | 6 | מערך סידורי |
XOBJ_DTYPE_OTHER | 7 | סוג מותאם אישית |
XOBJ_DTYPE_SOURCE | 8 | קוד מקור |
XOBJ_DTYPE_STIME | 9 | פורמט זמן קצר |
XOBJ_DTYPE_MTIME | 10 | פורמט זמן בינוני |
XOBJ_DTYPE_LTIME | 11 | פורמט זמן ארוך |
XOBJ_DTYPE_FLOAT | 12 | נקודה צפה |
XOBJ_DTYPE_DECIMAL | 13 | מספר עשרוני |
XOBJ_DTYPE_ENUM | 14 | ספירה |
דוּגמָה:
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); }}setVar
Section titled “setVar”מגדיר את הערך של משתנה.
public function setVar( string $key, mixed $value, bool $notGpc = false): boolפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$key | מחרוזת | שם משתנה |
$value | מעורב | ערך להגדרה |
$notGpc | bool | אם נכון, הערך אינו מ-GET/POST/COOKIE |
החזרות: bool - נכון אם מצליח, לא נכון אחרת
דוגמה:
$object = new MyObject();$object->setVar('title', 'Hello World');$object->setVar('content', '<p>Content here</p>', true); // Not from user input$object->setVar('status', 1);getVar
Section titled “getVar”מאחזר את הערך של משתנה עם עיצוב אופציונלי.
public function getVar( string $key, string $format = 's'): mixedפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$key | מחרוזת | שם משתנה |
$format | מחרוזת | פורמט פלט |
אפשרויות פורמט:
| פורמט | תיאור |
|---|---|
's' | הצג - HTML ישויות בריחה לתצוגה |
'e' | עריכה - לערכי קלט טופס |
'p' | תצוגה מקדימה - דומה להצגה |
'f' | נתוני טופס - גלם לעיבוד טופס |
'n' | ללא - ערך גולמי, ללא עיצוב |
החזרות: mixed - הערך המעוצב
דוגמה:
$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)
// For array data types$object->setVar('options', ['a', 'b', 'c']);$options = $object->getVar('options', 'n'); // Returns arraysetVars
Section titled “setVars”מגדיר משתנים מרובים בבת אחת ממערך.
public function setVars( array $values, bool $notGpc = false): voidפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$values | מערך | מערך אסוציאטיבי של מפתח => זוגות ערכים |
$notGpc | bool | אם נכון, הערכים אינם מ-GET/POST/COOKIE |
דוּגמָה:
$object = new MyObject();$object->setVars([ 'title' => 'My Title', 'content' => 'My content', 'status' => 1]);
// From database (not user input)$object->setVars($row, true);getValues
Section titled “getValues”מאחזר את כל ערכי המשתנים.
public function getValues( array $keys = null, string $format = 's', int $maxDepth = 1): arrayפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$keys | מערך | מפתחות ספציפיים לאחזור (null for all) |
$format | מחרוזת | פורמט פלט |
$maxDepth | int | עומק מרבי עבור אובייקטים מקוננים |
החזרות: array - מערך אסוציאטיבי של ערכים
דוגמה:
$object = new MyObject();
// Get all values$allValues = $object->getValues();
// Get specific values$subset = $object->getValues(['title', 'status']);
// Get raw values for database$rawValues = $object->getValues(null, 'n');assignVar
Section titled “assignVar”מקצה ערך ישירות ללא אימות (השתמש בזהירות).
public function assignVar( string $key, mixed $value): voidפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$key | מחרוזת | שם משתנה |
$value | מעורב | ערך להקצאה |
דוּגמָה:
// Direct assignment from trusted source (e.g., database)$object->assignVar('id', $row['id']);$object->assignVar('created', $row['created']);cleanVars
Section titled “cleanVars”מחטא את כל המשתנים עבור פעולות מסד נתונים.
public function cleanVars(): boolהחזרות: bool - נכון אם כל המשתנים תקפים
דוגמה:
$object = new MyObject();$object->setVar('title', 'Test');$object->setVar('email', 'user@example.com');
if ($object->cleanVars()) { // Variables are sanitized and ready for database $cleanData = $object->cleanVars;} else { // Validation errors occurred $errors = $object->getErrors();}הוא חדש
Section titled “הוא חדש”בודק או קובע אם האובייקט חדש.
public function isNew(): boolpublic function setNew(): voidpublic function unsetNew(): voidדוּגמָה:
$object = new MyObject();echo $object->isNew(); // true
$object->unsetNew();echo $object->isNew(); // false
$object->setNew();echo $object->isNew(); // trueשיטות טיפול בשגיאות
Section titled “שיטות טיפול בשגיאות”setErrors
Section titled “setErrors”מוסיף הודעת שגיאה.
public function setErrors(string|array $error): voidדוּגמָה:
$object->setErrors('Title is required');$object->setErrors(['Field 1 error', 'Field 2 error']);getErrors
Section titled “getErrors”מאחזר את כל הודעות השגיאה.
public function getErrors(): arrayדוּגמָה:
$errors = $object->getErrors();foreach ($errors as $error) { echo $error . "\n";}getHtmlErrors
Section titled “getHtmlErrors”מחזיר שגיאות בפורמט HTML.
public function getHtmlErrors(): stringדוּגמָה:
if (!$object->cleanVars()) { echo '<div class="error">' . $object->getHtmlErrors() . '</div>';}שיטות שירות
Section titled “שיטות שירות”ממירה את האובייקט למערך.
public function toArray(): arrayדוּגמָה:
$object = new MyObject();$object->setVar('title', 'Test');$data = $object->toArray();// ['title' => 'Test', ...]getVars
Section titled “getVars”מחזירה את הגדרות המשתנים.
public function getVars(): arrayדוּגמָה:
$vars = $object->getVars();foreach ($vars as $key => $definition) { echo "Field: $key, Type: {$definition['data_type']}\n";}דוגמה מלאה לשימוש
Section titled “דוגמה מלאה לשימוש”<?php/** * Custom Article Object */class Article extends XoopsObject{ /** * Constructor - Initialize all variables */ public function __construct() { parent::__construct();
// Primary key $this->initVar('article_id', XOBJ_DTYPE_INT, null, false);
// Required fields $this->initVar('title', XOBJ_DTYPE_TXTBOX, '', true, 255); $this->initVar('author_id', XOBJ_DTYPE_INT, 0, true);
// Optional fields $this->initVar('summary', XOBJ_DTYPE_TXTAREA, '', false); $this->initVar('content', XOBJ_DTYPE_TXTAREA, '', false); $this->initVar('category_id', XOBJ_DTYPE_INT, 0, false);
// Timestamps $this->initVar('created', XOBJ_DTYPE_INT, time(), false); $this->initVar('updated', XOBJ_DTYPE_INT, time(), false);
// Status flags $this->initVar('published', XOBJ_DTYPE_INT, 0, false); $this->initVar('views', XOBJ_DTYPE_INT, 0, false);
// Metadata as array $this->initVar('meta', XOBJ_DTYPE_ARRAY, [], false); }
/** * Get formatted creation date */ public function getCreatedDate(string $format = 'Y-m-d H:i:s'): string { return date($format, $this->getVar('created', 'n')); }
/** * Check if article is published */ public function isPublished(): bool { return $this->getVar('published', 'n') == 1; }
/** * Increment view counter */ public function incrementViews(): void { $views = $this->getVar('views', 'n'); $this->setVar('views', $views + 1); }
/** * Custom validation */ public function validate(): bool { $this->errors = [];
// Title validation $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'); }
// Author validation if ($this->getVar('author_id', 'n') <= 0) { $this->setErrors('Author is required'); }
return empty($this->errors); }}
// Usage$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()) { // Save to database via handler $handler = xoops_getModuleHandler('article', 'mymodule'); $handler->insert($article);
echo "Article saved with ID: " . $article->getVar('article_id');} else { echo "Errors: " . $article->getHtmlErrors();}שיטות עבודה מומלצות
Section titled “שיטות עבודה מומלצות”-
אתחול משתנים תמיד: הגדר את כל המשתנים בבנאי באמצעות
initVar() -
השתמש בסוגי נתונים מתאימים: בחר בקבוע
XOBJ_DTYPE_*הנכון לצורך אימות -
טפל בזהירות בקלט משתמש: השתמש ב-
setVar()עם$notGpc = falseלקלט משתמש -
אמת לפני שמירה: התקשר תמיד
cleanVars()לפני פעולות במסד הנתונים -
השתמש בפרמטרים של פורמט: השתמש בפורמט המתאים ב-
getVar()עבור ההקשר -
הרחבה עבור לוגיקה מותאמת אישית: הוסף שיטות ספציפיות לתחום בתתי מחלקות
תיעוד קשור
Section titled “תיעוד קשור”- XoopsObjectHandler - דפוס מטפל עבור התמדה של אובייקט
- ../Database/Criteria - בניין שאילתות עם קריטריונים
- ../Database/XoopsDatabase - פעולות מסד נתונים
ראה גם: XOOPS קוד מקור