2013-04-03 4 views
0

Я создал несколько плагинов WordPress, которые используют общий класс. Плагины должны работать индивидуально и идеально, если общий класс не установлен как отдельный плагин, но они также могут быть активированы в одной и той же установке. Теперь я могу предотвратить загрузку класса несколько раз, выполнив проверку класса_exists, но я бы хотел больше контролировать, какая версия класса используется, предпочтительно последняя версия. Это связано с тем, что пользователь не обновляет один из плагинов, и это может быть именно эта версия используемого общего класса. Есть ли способ такой проверки?Выбор последней версии класса

Я хочу, чтобы предотвратить это:

  • Пользователь устанавливает 2 различных плагинов: WPFoo & WPBar, они оба используют MyClass.
  • Пользователь имеет самую последнюю версию WPBar, но WordPress загружает старую версию MyClass, включенную в WPFoo, хотя у него уже есть последняя версия MyClass в WPBar.
  • В идеале пользователю не нужно беспокоиться об этом, потому что у него уже есть последняя версия.

Я думал о следующем сценарии:

  • Define глобального вар, в котором версия класса будет храниться ($ myclassversion)
  • WordPress загружает первое вхождение общего класса & хранит его версия
  • WordPress попадает во второе появление общего класса. Перед загрузкой класса выполняется проверка класса_exists, а $ myclassversion сравнивается с этой версией класса. Когда эта версия класса выше, старый класс не установлен, а новый - загружен.

Однако, afaik вы не можете отменить/переопределить класс, просто определяя его снова, правильно?


некоторой дополнительная информация: классов уже разделены на различные файлы. Я думал о том, что просто поименовал класс по-разному для каждого плагина, но в конечном итоге они изменяют один и тот же контент, и он становится беспорядочным, когда они делают это один за другим (каждый немного отличается, если версии отличаются).

ответ

2

Существует такой способ, при условии, что вы добавляете константу в свой класс, который содержит версию. Как это:

class MyCommonClass { 
constant VERSION = '2'; 

// Accessing via INSTANCE 
function showVersion() { 
    echo self::VERSION . "\n<br/>"; 
} 

} 

// Accessing globally 
echo MyCommonClass::VERSION . "\n<br/>"; 

// Programmatically As of PHP 5.3.0 

$classname = "MyCommonClass"; 
echo $classname::VERSION. "\n<br/>"; // As of PHP 5.3.0 

Так проверка:

if(class_exists("MyCommonClass")){ 
    if (MyCommonClass::VERSION < 2){ 
     echo "This plugin requires newest version of MyPackage\n<br/>"; 
     exit(0); 
    } 
}; 

Вы также можете разделить классы в файлы и включить их в соответствии с проверкой класса.

Наконец Дурные-практика путь включая класс в файле, как это:

<?php 
$versionOfclass = 2; 
if($versionOfClass >= $requiredVersionOfClass) { 
class MyClass { 

} 
} 
?> 

где $ requiredVersionOfClass приходит из файла PHP, который включает в себя это.

+0

Это, по крайней мере, предотвратит использование устаревшей версии, но пользователю не очень понятно, что он/она должен обновить для этого другой плагин.Я мог бы добавить еще один «постоянный PLUGIN =« Этот плагин »и использовать эту переменную в сообщении об ошибке, но я предпочел бы выбрать последнюю версию класса (которая уже будет включена в этот плагин, просто не загружена, потому что более старая плагин будет иметь более высокий приоритет). – Ewout

+0

@Ewout Абсолютно. Даже вы можете перенаправить пользователя на страницу загрузки, содержащую последнюю версию плагина. Поэтому вы должны найти информацию о версии плагина в центральном классе плагина, или вы можете определить ее как глобальную константу, встроенную в ваш источник плагина. – Ihsan

Смежные вопросы