我有一个代表 html 元素的类层次结构。其中一些可能与某些浏览器版本不兼容。例如,HTML5 画布与版本 9 之前的 Internet Explorer 不兼容。
对于每种类型的元素,我希望能够知道调用浏览器是否支持它们。
abstract class AbstractView // Base class, doesn't represent anything.
{
// ...
// By default, an element will be considered compatible with any version of ny browser.
protected static $FirstCompatibleVersions = array(
'Firefox' => 0,
'Chrome' => 0,
'Internet Explorer' => 0);
protected static function SetFirstCompatibleVersion($browser, $version)
{
static::$FirstCompatibleVersions[$browser] = $version;
}
protected static function IsSupportedByBrowser()
{
$browser = // ... Assumed to be the calling browser name.
$version = // ... Assumed to be the calling browser version.
return static::$FirstCompatibleVersions[$browser] <= $version;
}
}
class CanvasView extends AbstractView // Displays a canvas. Not compatible with IE < 9.
{
// ...
}
CanvasView::SetFirstCompatibleVersion('Internet Explorer', 9);
class FormView extends AbstractView // Displays a form. Assumed compatible with anything.
{
// ...
}
// Nothing to do form FormView.
echo FormView::IsSupportedByBrowser(); // Should print 1 (true) (on firefox 12) but does not.
我的问题是,当我执行时:
CanvasView::SetFirstCompatibleVersion('Internet Explorer', 9);
这不仅会设置 CanvasView::$FirstCompatibleVersion['Internet Explorer'],还会为所有其他类设置这个值,就像这个数组对所有类一样,使我的所有元素与 IE < 9 不兼容.
我能做些什么来防止这种情况发生?
感谢您花时间阅读。
-病毒