From c90dc06af20b4ec549e43b2b90c018ba0f030cad Mon Sep 17 00:00:00 2001 From: Patrick Monnerat Date: Fri, 14 Jan 2022 07:29:20 +0100 Subject: [PATCH] Rename class Attribute to PLAAttribute. As PHP 8 introduces a built-in Attribute class, a name clash occurs without this commit. Class names are used by the Visitor class to dynamically build method names. To avoid having to also rename the target methods, a class name mapping is introduced for this purpose. This map may be augmented whenever another similar case occurs. --- lib/AttributeFactory.php | 2 +- lib/BinaryAttribute.php | 2 +- lib/DateAttribute.php | 2 +- lib/DnAttribute.php | 2 +- lib/GidAttribute.php | 2 +- lib/MultiLineAttribute.php | 2 +- lib/ObjectClassAttribute.php | 2 +- lib/{Attribute.php => PLAAttribute.php} | 2 +- lib/PasswordAttribute.php | 2 +- lib/SelectionAttribute.php | 2 +- lib/ShadowAttribute.php | 2 +- lib/Visitor.php | 24 ++++++++++++++---------- 12 files changed, 25 insertions(+), 21 deletions(-) rename lib/{Attribute.php => PLAAttribute.php} (99%) diff --git a/lib/AttributeFactory.php b/lib/AttributeFactory.php index 82cf562..96bb70b 100644 --- a/lib/AttributeFactory.php +++ b/lib/AttributeFactory.php @@ -133,7 +133,7 @@ class AttributeFactory { return $this->newGidAttribute($name,$values,$server_id,$source); } else { - return new Attribute($name,$values,$server_id,$source); + return new PLAAttribute($name,$values,$server_id,$source); } } diff --git a/lib/BinaryAttribute.php b/lib/BinaryAttribute.php index 6b5053b..35fe5d2 100644 --- a/lib/BinaryAttribute.php +++ b/lib/BinaryAttribute.php @@ -12,7 +12,7 @@ * @package phpLDAPadmin * @subpackage Templates */ -class BinaryAttribute extends Attribute { +class BinaryAttribute extends PLAAttribute { protected $filepaths; protected $filenames; diff --git a/lib/DateAttribute.php b/lib/DateAttribute.php index e1a687f..df0b6e8 100644 --- a/lib/DateAttribute.php +++ b/lib/DateAttribute.php @@ -12,6 +12,6 @@ * @package phpLDAPadmin * @subpackage Templates */ -class DateAttribute extends Attribute { +class DateAttribute extends PLAAttribute { } ?> diff --git a/lib/DnAttribute.php b/lib/DnAttribute.php index 1f5c02f..692ec65 100644 --- a/lib/DnAttribute.php +++ b/lib/DnAttribute.php @@ -12,6 +12,6 @@ * @package phpLDAPadmin * @subpackage Templates */ -class DnAttribute extends Attribute { +class DnAttribute extends PLAAttribute { } ?> diff --git a/lib/GidAttribute.php b/lib/GidAttribute.php index 7442a07..4ea0d12 100644 --- a/lib/GidAttribute.php +++ b/lib/GidAttribute.php @@ -12,6 +12,6 @@ * @package phpLDAPadmin * @subpackage Templates */ -class GidAttribute extends Attribute { +class GidAttribute extends PLAAttribute { } ?> diff --git a/lib/MultiLineAttribute.php b/lib/MultiLineAttribute.php index b6d0eb5..2da4bb9 100644 --- a/lib/MultiLineAttribute.php +++ b/lib/MultiLineAttribute.php @@ -12,7 +12,7 @@ * @package phpLDAPadmin * @subpackage Templates */ -class MultiLineAttribute extends Attribute { +class MultiLineAttribute extends PLAAttribute { protected $rows = 0; protected $cols = 0; diff --git a/lib/ObjectClassAttribute.php b/lib/ObjectClassAttribute.php index 939094d..7807098 100644 --- a/lib/ObjectClassAttribute.php +++ b/lib/ObjectClassAttribute.php @@ -12,6 +12,6 @@ * @package phpLDAPadmin * @subpackage Templates */ -class ObjectClassAttribute extends Attribute { +class ObjectClassAttribute extends PLAAttribute { } ?> diff --git a/lib/Attribute.php b/lib/PLAAttribute.php similarity index 99% rename from lib/Attribute.php rename to lib/PLAAttribute.php index 9c4ef98..313b42a 100644 --- a/lib/Attribute.php +++ b/lib/PLAAttribute.php @@ -12,7 +12,7 @@ * @package phpLDAPadmin * @subpackage Templates */ -class Attribute { +class PLAAttribute { # Attribute Name public $name; # Source of this attribute definition diff --git a/lib/PasswordAttribute.php b/lib/PasswordAttribute.php index 2667197..5971576 100644 --- a/lib/PasswordAttribute.php +++ b/lib/PasswordAttribute.php @@ -12,6 +12,6 @@ * @package phpLDAPadmin * @subpackage Templates */ -class PasswordAttribute extends Attribute { +class PasswordAttribute extends PLAAttribute { } ?> diff --git a/lib/SelectionAttribute.php b/lib/SelectionAttribute.php index 5f1c8bb..dfb13c7 100644 --- a/lib/SelectionAttribute.php +++ b/lib/SelectionAttribute.php @@ -12,7 +12,7 @@ * @package phpLDAPadmin * @subpackage Templates */ -class SelectionAttribute extends Attribute { +class SelectionAttribute extends PLAAttribute { protected $selection = array(); protected $multiple; protected $default; diff --git a/lib/ShadowAttribute.php b/lib/ShadowAttribute.php index eeb7cd1..0dcf915 100644 --- a/lib/ShadowAttribute.php +++ b/lib/ShadowAttribute.php @@ -12,7 +12,7 @@ * @package phpLDAPadmin * @subpackage Templates */ -class ShadowAttribute extends Attribute { +class ShadowAttribute extends PLAAttribute { public $shadow_before_today_attrs = array('shadowLastChange','shadowMin'); public $shadow_after_today_attrs = array('shadowMax','shadowExpire','shadowWarning','shadowInactive'); } diff --git a/lib/Visitor.php b/lib/Visitor.php index fca5099..b840e7b 100644 --- a/lib/Visitor.php +++ b/lib/Visitor.php @@ -22,6 +22,15 @@ abstract class Visitor { protected $server_id; public function __call($method,$args) { + # This mapping array allows to map effective class names to + # function name suffixes. + # It has been introduced when class Attribute has been renamed + # to PLAAttribute to avoid a name clash with the built-in + # class of PHP 8. + # Entering a class name mapping here allows to rename the + # class without having to rename the methods too. + static $classmap = array('PLAAttribute' => 'Attribute'); + if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS')) debug_log('Entered (%%)',129,0,__FILE__,__LINE__,__METHOD__,$fargs); @@ -33,19 +42,14 @@ abstract class Visitor { $fnct = array_shift($args); $object = $args[0]; - $class = get_class($object); - $call = "$method$fnct$class"; - - array_push($methods,$call); - - while ($class && ! method_exists($this,$call)) { + for ($class = get_class($object); $class; $class = get_parent_class($class)) { + $call = isset($classmap[$class])? "$method$fnct$classmap[$class]": "$method$fnct$class"; + array_push($methods,$call); + if (method_exists($this,$call)) + break; if (defined('DEBUGTMP') && DEBUGTMP) printf('Class (%s): Method doesnt exist (%s,%s)
',$class,get_class($this),$call); - - $class = get_parent_class($class); - $call = "$method$fnct$class"; - array_push($methods,$call); } if (defined('DEBUGTMP') && DEBUGTMP)