چند سؤال مصاحبه:
- در PHP، چگونه میتوانیم از subclass به superclass دسترسی داشته باشیم؟
- برای یک ادیتور، ساختاری طراحی کنید که بدون تغییر، تگهای جدیدی معرفی شود.
- در Laravel، یک دستور به artisan اضافه کنید که لیست routeها را در یک فایل html قرار دهد.
- تفاوت overloading و overriding را توضیح دهید.
- در PHP، چگونه میتوانیم از subclass به superclass دسترسی داشته باشیم؟
- برای یک ادیتور، ساختاری طراحی کنید که بدون تغییر، تگهای جدیدی معرفی شود.
- در Laravel، یک دستور به artisan اضافه کنید که لیست routeها را در یک فایل html قرار دهد.
- تفاوت overloading و overriding را توضیح دهید.
👍3🔥1
توی جاواسکریپت،
()Date یه string بهمون میده، اما خروجی ()new Date یه آبجکته.👍2
سوال: چرا توی Typenoscript نباید از any به عنوان type استفاده کرد؟
جواب: بیکاز ما از typeها استفاده میکنیم تا به باگهای کمتری بخوریم و توسعه، راحتتر و مطمئنتر بشه. اگه قراره از any (هرچی!) استفاده کنیم، دیگه چرا از Typenoscript استفاده میکنیم؟! میریم همون Javsacriptمون رو مینویسیم!
جواب: بیکاز ما از typeها استفاده میکنیم تا به باگهای کمتری بخوریم و توسعه، راحتتر و مطمئنتر بشه. اگه قراره از any (هرچی!) استفاده کنیم، دیگه چرا از Typenoscript استفاده میکنیم؟! میریم همون Javsacriptمون رو مینویسیم!
👍3🔥2
const something = undefined
if (!something) { console.log('Yep') } else { console.log('Nope') }
if (!something) { console.log('Yep') } else { console.log('Nope') }
Anonymous Quiz
56%
Yep
44%
Nope
🔥3
🔥3
Philocode
console.log(typeof [1, 2, 3])
پس فهمیدیم که
typeof ['chiz', 'another chiz']میشه 'object'، اگه خواستید آرایهبودن رو چک کنید، یه کار ساده اینه که بفرمایید:
Array.isArray(['chiz', 'another chiz'])
اون چند نفری که گزینۀ اول رو انتخاب کردن رو هم زنده میخوام!👍1
کلاسهایی که دپندنسی کلاسهای دیگه هستن، باید خیلی خوب و واضح نوشته بشن. اگه مشکلی باشه، باید یه Exception بدن تا رفتارشون مارو فریب نده. مثلاً جایی که درست کار نکرده، null برنگردونید، تا کدی که ازش استفاده میکنه، متوجه خطا بشه. کلید اینه که خطاها باید داد بزنن، نه اینکه پنهان بشن.
👍2🤔1
نوشتن این مقاله، انرژی زیادی گرفت. اگه تا الآن LSP رو درک نکردید، امیدوارم این مقاله بهتون کمک کنه.
https://virgool.io/@WebPajooh/liskov-substitution-principle-in67fgqwv8ir
https://virgool.io/@WebPajooh/liskov-substitution-principle-in67fgqwv8ir
ویرگول
فهمیدن LSP - یکبار برای همیشه!
در این مقاله به توضیح اصل سوم SOLID یعنی LSP میپردازیم و با مثالهای متعدد، دید بهتری از قوانین آن ارائه میکنیم
❤6
Philocode
چی شد؟! 😂
این اتفاق وقتی میافته که توی اسم فایل view از نقطه استفاده کرده باشید:
return view('payment.callback');
لاراول نقطه رو با slash جایگزین میکنه و در نتیجه خیال میکنه که فایل شما اینجاست:resourcesدرحالیکه فایل شما اینجاست:
/ views
/ payment
callback{.extension}
resources
/ views
/ payment.callback{.extension}
👍2🔥1
Philocode
این اتفاق وقتی میافته که توی اسم فایل view از نقطه استفاده کرده باشید: return view('payment.callback'); لاراول نقطه رو با slash جایگزین میکنه و در نتیجه خیال میکنه که فایل شما اینجاست: resources / views / payment callback{.extension}…
GitHub
notice if dots have been used in the view name by WebPajooh · Pull Request #457 · facade/ignition
View directory names should not contain the . character.
https://laravel.com/docs/9.x/views#nested-view-directories
Today I got this message because I had used a name like foo.bar.blade.php for my...
https://laravel.com/docs/9.x/views#nested-view-directories
Today I got this message because I had used a name like foo.bar.blade.php for my...
❤3🔥2👍1
وقتی که یه سرویس نیاز داره کانفیگی رو از سیستم داشته باشه...
مثال: کلاس Payment میخواد بدونه که کدوم درگاه پرداخت، فعاله.
کانفیگ ما ممکنه متغیر سراسری (global) باشه، از دیتابیس خونده بشه یا هرچیزی. مهم نیست.
اینجا سرویس ما روی کانفیگهامون وابستگی (dependency) داره، ولی نیازی نیست کل کانفیگ رو بهش پاس بدیم:
مثال: کلاس Payment میخواد بدونه که کدوم درگاه پرداخت، فعاله.
کانفیگ ما ممکنه متغیر سراسری (global) باشه، از دیتابیس خونده بشه یا هرچیزی. مهم نیست.
اینجا سرویس ما روی کانفیگهامون وابستگی (dependency) داره، ولی نیازی نیست کل کانفیگ رو بهش پاس بدیم:
class Paymentبهجای اینجکتکردن کل آبجکت، فقط مقداری رو اینجکت کنید که سرویس واقعاً بهش نیاز داره. آبجکت appConfig ممکنه صدتا مقدار مختلف داخلش باشه و سرویس Payment جز یکی، نیازی به بقیهشون نداره.
{
private $config;
public function __construct(AppConfig $appConfig)
{
$this->config = $appConfig;
}
}
🔥1
Philocode
امشب این کتاب رو شروع کردم. به نظر کتاب خیلی خوبی میاد. #books #manning
ماتیاس نوباک میگه که آبجکتها دو نوع هستند:
+ Services
+ Other objects:
- Value objects
- Entities (models)
نوع اول باید immutable باشه، بر خلاف نوع دوم که میتونه دستکاری بشه.
+ Services
+ Other objects:
- Value objects
- Entities (models)
نوع اول باید immutable باشه، بر خلاف نوع دوم که میتونه دستکاری بشه.
👍1
این پکیج لاراولی، کد و ساختار پروژۀ شمارو تحلیل میکنه!
https://github.com/nunomaduro/phpinsights
#laravel
https://github.com/nunomaduro/phpinsights
#laravel
🔥2
Philocode
ماتیاس نوباک میگه که آبجکتها دو نوع هستند: + Services + Other objects: - Value objects - Entities (models) نوع اول باید immutable باشه، بر خلاف نوع دوم که میتونه دستکاری بشه.
میفرماید که ما کلاسی داریم که با پول سر و کار داره:
class Converterاما ممکنه که مقادیر غیر مجاز برای این دو پارامتر داده بشه، مثلاً برای amount عددی منفی بیاد یا اینکه برای currency مقدار "ABC" بیاد که واحد پول هیچ کشوری نیست! برای اینکه ولیدیشن رو داخل constructor انجام ندیم، اینهارو به عنوان تایپ مستقلی در میاریم:
{
public function __construct(float $amount, string $currency) { ... }
}
class Converterخیلی خوب شد، اما مثلاً خروجی ما میتونه Amount باشه درحالیکه به Currency هم نیاز داریم؛ به یه عبارت دیگه، این دو مقدار به هم ارتباط دارند و نمیخواییم جداشون کنیم، از طرفی توی بخشهای دیگۀ سیستم ممکنه به هرکدومشون به تنهایی نیاز پیدا کنیم، پس هر دو رو داخل تایپ جدیدی به اسم Money میذاریم:
{
public function __construct(Amount $amount, Currency $currency) { ... }
}
class Converterو خود Money هم اینطوری ساخته میشه:
{
public function __construct(Money $money) { ... }
}
class Money
{
public function __construct(Amount $amount, Currency $currency) { ... }
}👍2