
در حین گشت و گذار در وب بودم، که کاملاً تصادفی به بیست و پنج سؤال مربوط به مصاحبههای استخدامی PHP برخوردم؛ سؤالات جالبی مطرح شده بود که حیفم آمد با شما عزیزان به اشتراک نگذارم، پس شروع به ترجمهی بیست سؤال از بیست و پنج سؤال به همراه جوابهایشان کردم، امیدوارم مورد استفادهی شما قرار گرفته و برایتان مفید باشد!
جواب: هردو یک کار را انجام میدهند، منتها اگر خطایی رخ دهد، require یک fatal error را throw کرده و اجرای کدها را متوقف میکند، بر خلاف include که به اجرای اسکریپت ادامه میدهد.
جواب: از unset برای نابودکردن متغیر(ها) استفاده میکنیم، اما unlink برای حذف فایل از فایلسیستم است.
$x = '7'; $y = &$x; $y = "3$x"
جواب: مقدار هر دو، '37' میشود.
جواب: یک Exception میتواند پرتاب (Throw) شود و همچنین این امکان وجود دارد که از قبل در یک بلاک Try-Catch قرار گیرد، اما Errorها در PHP قابل بازگردانی نبوده و میتوانند برنامه را متوقف کنند.
جواب:
جواب: مورد دوم، علاوه بر مقدار، به بررسی تساوی نوع هم میپردازد؛ پس مورد اول ابتدا باید نوع دو طرف را یکسانسازی کند و تبدیل نوع را انجام دهد، بعد به بررسی مقایسهای روی مقدار بپردازد، بنابراین === از == سریعتر است!
مثال: عبارت TRUE == 1 برابر TRUE میشود، اما TRUE === 1 چنین نیست و مقدارش FALSE میباشد.
جواب: خروجی FALSE است، زیرا ما یک 42 که هشتهشتی است را با یک 42 که دهدهی میباشد مقایسه کردهایم، در نتیجه عبارت بعد از تبدیل 42 == 34 است که باید FALSE باشد!
جواب: تفاوتی ندارند؛ حالت دوم، کوتاهشدهی array است که در پیاچپی نسخهی 5.4 معرفی شده، پس در نسخههای قدیمیتر قابل اجرا نبوده و موجب خطای در برنامه میشود.
جواب: استفاده از دابلکوتیشن اجازه میدهد که در بین رشته، متغیرها را هم وارد کنیم، اما سینگلکوتیشن چنین قابلیتی ندارد. از آنجا که در صورت استفاده از دابلکوتیشن، عملیاتی صورت میگیرد تا متغیرها را در رشته شناسایی و بازیابی کند، سینگلکوتیشن سریعتر خواهد بود!
جواب: && بر AND اولویت دارد.
جواب: echo هیچ مقداری را برنمیگرداند، اما print برای اینکه نشان دهد که عملیات با موفقیت انجام شده، 1 را برمیگرداند. همچنین شما میتوانید که چندین پارامتر را به echo ارسال کرده و با کاما بینشان فاصله بگذارید تا همه را چاپ کند، اما print تنها یک پارامتر میگیرد.
$str = 'PHP is my language.'; if (strpos($str, 'PHP')) { return true; } else { return false; }
جواب: خروجی FALSE است؛ تابع strpos به دنبال موقعیت رشتهی PHP در درون جمله میگردد و از آنجا که این کلمه در ابتدای جمله آمده است، عدد 0 برگردانده میشود و در نتیجه FALSE به خروجی فرستاده شود.
Warning: Cannot modify header information – headers already sent.
جواب: اگر بعد از نمایش چیزی در صفحه (مانند echoکردن، html، فاصلهدادن پیش از تگ شروع PHP و...) هدرهای HTTP را (با ستکردن کوکی، سشن، Response Type، ریدایرکتکردن و...) تغییر دهید، این خطا به وجود میآید!
جواب: متد construct__ بلافاصله پس از ساختن یک نمونه از کلاس صدا زده میشود تا مشخصههای کلاس را اولیهسازی کند، اما متد destruct__ در زمان نابودکردن شیء ایجادشده از کلاس، وقتی که اجرای اسکریپت متوقف میشود، صدا زده میشود.
جواب:
جواب: زمانی که متدِ یک کلاس به صورت final تعریف شود، فرزندهای آن کلاس نمیتوانند آن متد را override کنند، و اگر کلیت کلاس به عنوان final تعریف گردد، دیگر نمیتوان از آن فرزندی ساخت.
جواب: خیر، اما Traitها میتوانند راه حلی برای این کمبود در PHP و زبانهای دیگری باشند که از ارثبری چندگانه پشتیبانی نمیکنند.
جواب: Traitها در زبانهایی که از ارثبری چندگانه پشتیبانی نمیکنند، مکانیسمی هستند تا بتوان از کد در جاهای مختلفی استفاده کرد و به کلاسهای مختلفی اضافه نمود تا قابلیتهایشان را افزایش دهد.
جواب: Interface متدهایی که کلاس باید در خود داشته باشد را تعیین میکند، بدون اینکه به شیوهی هندلشدن و منطق این متدها کاری داشته باشد! اما کلاسهای Abstract، کلاسهایی هستند که حداقل یک متد Abstract در خود دارند و نمیتوان از آنها نمونهای ایجاد کرد، تنها میتوان از آنها ارثبری کرد و متدهای این نوع باید در کلاسهای فرزند هم ایجاد شوند. بر خلاف Interfaceها، میتوانیم با Abstractها از قبل به تعریف متدهایی که کلاسِ فرزند باید از آنها استفاده کند بپردازیم.
جواب: Composer ابزاری برای مدیریت وابستگیها در PHP است، و به شما امکان این را میدهد که ابزارهای مورد نیاز در پروژهی خود را تعیین کنید تا خود عهدهدار نصب، بهروزرسانی و بارگیری خودکار (Autoloading) شود!
منبع: