نحوه تعریف:
یک کلاس final با استفاده از کلمه کلیدی
final قبل از کلمه class در تعریف کلاس ایجاد میشود:final class MyClass {
// تعاریف و متدهای کلاس
}کاربردها:
زمانی که نمیخواهید کلاسهای دیگر بتوانند از کلاس مورد نظر ارثبری کنند. این امر میتواند برای حفظ امنیت، استقرار یک API ثابت، یا جلوگیری از استفاده نادرست از کلاس در زیرکلاسها مفید باشد.
در مواردی که میخواهید اطمینان حاصل کنید که رفتار یک کلاس تغییر نمیکند و همیشه ثابت باقی میماند، استفاده از کلاسهای final میتواند مفید باشد.
تفاوتها با کلاسهای عادی:
تفاوت اصلی بین کلاسهای final و کلاسهای عادی در قابلیت ارثبری آنها است. در حالی که کلاسهای عادی میتوانند به عنوان پایه برای کلاسهای دیگر استفاده شوند، کلاسهای final این قابلیت را ندارند. این محدودیت به شما کمک میکند تا اطمینان حاصل کنید که کلاسهایتان به شیوهای که مد نظر دارید استفاده میشوند و نباید تغییر کنند یا گسترش یابند.
در برخی موارد، موتور Zend Engine که PHP بر روی آن اجرا میشود، میتواند کلاسهای final را بهینهتر اجرا کند، زیرا نیازی به جستجو برای متدهای override شده در کلاسهای فرزند نیست.
مثال:
فرض کنید ما در حال توسعه یک سیستم مدیریت محتوا (CMS) هستیم و میخواهیم اطمینان حاصل کنیم که کلاس مربوط به اتصال به پایگاه داده نمیتواند تغییر کند یا از آن ارثبری شود، زیرا تغییر در این کلاس میتواند امنیت و ثبات کل سیستم را به خطر بیندازد.
final class DatabaseConnection {
private $connection;
private $host = 'localhost';
private $username = 'root';
private $password = 'password';
private $database = 'my_database';
public function __construct() {
$this->connection = new mysqli($this->host, $this->username, $this->password, $this->database);
if ($this->connection->connect_error) {
die("Connection failed: " . $this->connection->connect_error);
}
}
public function getConnection() {
return $this->connection;
}
// دیگر متدهای مربوط به اتصال به پایگاه داده...
}در این مثال، کلاس
DatabaseConnection به عنوان یک کلاس final تعریف شده است. این بدان معناست که هیچ کلاس دیگری نمیتواند از این کلاس ارثبری کند. این امر اطمینان میدهد که روش اتصال به پایگاه داده در سراسر برنامه ثابت و قابل اعتماد باقی میماند و از تغییرات ناخواسته جلوگیری میکند.👤 AmirHossein
💎 Channel: @DevelopixPHP