GraphQL API مع C#: دليل تعليمي عملي خطوة بخطوة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا التحقق من بداية ونهاية سلسلة نصية في PHP؟

تخيّل: أنت تبني موقعًا إلكترونيًا بلغة PHP، وتحتاج إلى التحقق مما إذا كان اسم ملف ينتهي بـ .jpg؟ أو ما إذا كان بريد إلكتروني يبدأ بـ admin؟ في الماضي، كنت مضطرًا لكتابة حلول بديلة باستخدام substr() أو التعبيرات المنتظمة. لكن ابتداءً من PHP 8.0، أصبح لدينا حل أنيق — دالّتا str_starts_with() و str_ends_with().

هذه ليست مجرد تحسينات شكلية. إنها طرق سريعة وقابلة للقراءة وآمنة للتعامل مع السلاسل النصية يجب أن يعرفها كل مطور PHP. في هذا المقال، سنشرحهما بأمثلة واقعية، ونقارنهما بالطرق القديمة، ونوضح لك كيفية تجنب الأخطاء الشائعة.

ما هما str_starts_with و str_ends_with؟

ظهرت كلتا الدالتين في PHP 8.0 (التي صدرت في نوفمبر 2020). تحلان مهمة بسيطة واحدة: التحقق مما إذا كانت سلسلة نصية تحتوي على بادئة (بداية) أو لاحقة (نهاية) معينة.

توقيع الدالتين

str_starts_with(string $haystack, string $needle): bool
str_ends_with(string $haystack, string $needle): bool
  • $haystack — السلسلة النصية المراد البحث فيها.
  • $needle — السلسلة الفرعية المراد البحث عنها.
  • تُرجع true أو false.

مثال بسيط

echo str_starts_with('Hello, world!', 'Hello'); // true
echo str_ends_with('Hello, world!', 'world!');   // true
echo str_starts_with('Hello, world!', 'world');  // false

هام: الدالتان حساستان لحالة الأحرف. str_starts_with('PHP', 'php') سترجع false. إذا كنت بحاجة إلى مقارنة غير حساسة لحالة الأحرف، استخدم strtolower() أو strtoupper() على كلا السلسلتين.

أمثلة استخدام من العالم الواقعي

1. التحقق من امتدادات الملفات

$filename = 'report_2024.pdf';

if (str_ends_with($filename, '.pdf')) {
    echo "هذا مستند PDF";
} elseif (str_ends_with($filename, '.jpg')) {
    echo "هذه صورة";
} else {
    echo "تنسيق غير معروف";
}

في الماضي، كان يتم هذا باستخدام substr($filename, -4) — وكان من السهل ارتكاب خطأ في طول اللاحقة. الآن الكود يبدو وكأنه إنجليزية واضحة: "السلسلة تنتهي بـ".

2. التحقق من صحة عناوين URL أو البريد الإلكتروني

$email = 'user@gmail.com';
$url = 'https://pythonlib.ru';

if (str_ends_with($email, '@gmail.com')) {
    echo "مستخدم Gmail";
}

if (str_starts_with($url, 'https://')) {
    echo "اتصال آمن";
}

3. تصفية مصفوفة من السلاسل النصية

$files = ['image.jpg', 'document.pdf', 'photo.png', 'notes.txt'];

$images = array_filter($files, function($file) {
    return str_ends_with($file, '.jpg') || str_ends_with($file, '.png');
});

print_r($images); // ['image.jpg', 'photo.png']

كيف كان العمل يتم من قبل (ولماذا الدوال الجديدة أفضل)

قبل PHP 8.0، كان المطورون يستخدمون عدة طرق. دعنا نقارنها بالدوال الجديدة.

الطريقة 1: substr()

// الطريقة القديمة: التحقق من البداية
if (substr($string, 0, strlen('prefix')) === 'prefix') { ... }

// الطريقة الجديدة
if (str_starts_with($string, 'prefix')) { ... }

عيوب الطريقة القديمة:

  • مطولة: تحتاج إلى حساب طول السلسلة الفرعية.
  • خطر الخطأ مع الطول السالب (إذا كان $needle أطول من $haystack).
  • كود أقل قابلية للقراءة.

الطريقة 2: strpos()

// الطريقة القديمة: التحقق من البداية
if (strpos($string, 'prefix') === 0) { ... }

// الطريقة الجديدة
if (str_starts_with($string, 'prefix')) { ... }

مع strpos، من السهل ارتكاب خطأ منطقي: إذا لم تستخدم === 0، واستخدمت بدلاً من ذلك == false أو == 0

المدونات

توصيات الكتب