هذا احسن ما توصلت اليه بالنسبة لنظام التراخيص، كلاس يقوم "بتغطية" الدوال في البرمجية(ويمكن استخدامه للكلاسات مع بعض التعديلات)
ما معنى تغطية؟
نقوم بتسجيل الدوال كلها في الكلاس
ثم نقوم باستدعاء الدالة التي نريدها عن طريق الكلاس
هذا الكلاس يفحص حسب المعلومات التي عنده، هل هذه الدالة + رقم المجموعة مصرح لها بالعمل، اذا نعم يقوم بتشغيلها، اذا لا ،يقوم بطباعة warning
هنا يمكن ان تتحكم بدرجة التحذير من warning,notice,fatal error كما تشاء عن طريق الدالة:
http://php.net/manual/en/function.trigger-error.php
كود PHP:
$all_funcs = get_defined_functions() ;
foreach ($all_funcs['user'] as $func)
$this->add($func);
هذا الكود وضعته في البناء للكلاس وهو يقوم باضافة كل الدوال المعرفة عن طريق المستخدم تلقائيًا للكلاس، يمكن شطب هذا الامر واضافة الدوال كما تشاء .
كود PHP:
$this->func_r = array();
//function name || group name
$this->priv_r = array('print_data'=>12);
هذه متغيرات الكلاس، وهي واضحة كما ترى
نقوم بتشغيل الدالة عن طريق الامر:
كود PHP:
$wrapper->run("print_data",array("ahmad","here"),1112);
نقوم بادخال بارمترات الدالة كمصفوفة
اما هنا:
كود PHP:
if ($this->priv_r[$func_name] == $group_id)
call_user_func_array($func_name,$arg);
نقوم بفحص الصلاحيات ثم نقوم بتشغيل الدالة اذا كان لها صلاحية
وهذا هو الكود كامل، مع تجربته بصلاحيات صحيحة وغير صحيحة:
كود PHP:
<?php
class wrapper{
private $func_r;
private $priv_r;
function __construct(){
$this->func_r = array();
//function name || group name
$this->priv_r = array('print_data'=>12);
$all_funcs = get_defined_functions() ;
foreach ($all_funcs['user'] as $func)
$this->add($func);
}
function add($func){
$this->func_r[] = $func;
}
function run($func_name,$arg,$group_id){
if ($this->priv_r[$func_name] == $group_id)
call_user_func_array($func_name,$arg);
else
trigger_error("permission denied",E_USER_WARNING);
}
}
function print_data($name,$to){
echo "<p>Welcome {$name} to {$to}</p>";
}
$wrapper = new wrapper();
$wrapper->run("print_data",array("ahmad","here"),1112);
$wrapper->run("print_data",array("ahmad","here"),12);
//function not found
$wrapper->run("print_data1",array("ahmad","here"),12);
?>
بالتوفيق