Наследование

jqGridPHP заставляет разработчика использовать наследование. Каждой таблице соответствует отдельный класс, и весь специфичный код содержится только в нем. Базовая библиотека не затрагивается.

Главные преимущества такого подхода:

  • Возможность неограниченной кастомизации любых функций.
  • Полный доступ ко всем внутренним переменным и функциям.
  • Независимость - изменения в одной таблице не затрагивают другие, если вы специально этого не хотите.
  • Простая поддержка - всегда проще вносить изменения в небольшой файл, где все особенности на виду.

Простоту поддержки смогут оценить главным образом те люди, у которых в проекте больше 50 таблиц, и в них регулярно нужно вносить мелкие изменения.

Основной минус: вы можете случайно перегрузить стандартные свойства и функции.
Чтобы избежать этой проблемы, рекомендуется использовать IDE с подсказками по наследованию, либо использовать префикс для своих свойств и функций. Например, символ «подчеркивание».

Примеры использования

На случай, если вы мало работали с наследованием в PHP, приведу несколько простых примеров.

1. Полное замещение стандартных свойств и функций

Чтобы полностью заместить свойство или функцию - просто объявите из в классе-потомке и задайте новые значения, какие вам угодно.

<?php
class jq_example extends jqGrid
{
    #Replace variable
    protected $table = 'tbl_customer';
 
    #Replace function
    protected function search()
    {
        return false;
    }
}

2. Частичное замещение функций, добавление действий "перед" и "после"

Чтобы добавить произвольный код в любую функцию, сохранив при этом её обычное поведение, используйте обращение к объекту-родителю parent.

<?php
class jq_example extends jqGrid
{
    protected function opAdd($data)
    {
        #BEFORE common actions: Validate data
        if($data['foo'] < 0)
        {
            throw new jqGrid_Exception('Bad input data!');
        }
 
        #Common actions
        $id = parent::opAdd($data);
 
        #AFTER common actions: clear caches
        cache::dropSomeCache();
 
        #Return the result of original function
        return $id;
    }
}

Еще раз - вы можете добавить произвольный код куда захотите. После, перед или вместо любого действия. Любой PHP-код без ограничений.


На других языках