【问题标题】:OOP passing config to class that sets valuesOOP 将配置传递给设置值的类
【发布时间】:2014-03-22 03:41:32
【问题描述】:

我有 ini 文件被解析并设置为一个类,该类将每个值设置为常量或类变量。比如这个;

function set_val($vals){
    define('VAL,$val['val']);
    define('val1,$val['val1']);
    ....

此常量/变量设置最多可用于 20 个值。

确保 $val['val1'] 值根据 OOP 设置的适当方法是什么?似乎写很多 isset() 是不合适的。

创建一个接受 $vals 数组并确保键值存在的泛型类是否合适?

如果我使用上面提到的泛型类,我的理解是 oop 规则(组合而不是继承?)说我不应该在 set vals 方法内创建泛型类对象?

就 OOP 而言,在加载配置时确保密钥存在的适当解决方案是什么?

ps(我知道我不应该使用常量,但在不更改大量代码的情况下,我不知道该怎么做)

【问题讨论】:

    标签: php oop config ini isset


    【解决方案1】:
    <?php
    
    $ini_values=array('CONSTA'=>1,'CONSTC'=>3); //For testing
    
    set_val($ini_values);
    
    function set_val($ini_values){
    $required_consts=array('CONSTA','CONSTB','CONSTC'); //Array of constants you need
    //...
     foreach($required_consts as $required_const){
      if(!empty($ini_values[$required_const])){
       define($required_const,$ini_values[$required_const]);
      }else{
        echo"<br />Value for $required_const missing<br />"; //Handle here
      }
     }
    //...
    }
    
    //Show result for testing
    echo CONSTA;
    echo'<br />';
    echo CONSTB;
    echo'<br />';
    echo CONSTC;
    
    ?>
    

    输出:

    Value for CONSTB missing
    1
    CONSTB
    3
    

    【讨论】:

    • 看起来不错,但基于原始帖子引发了担忧,例如适当的 oop。这设置了常量,设置类变量的类似操作呢。以上也是一个函数,如果它是一个类和泛型,如何/在哪里设置 ini_values=array() 以及在哪里调用 set_val() 等等
    • 您的初始要求是确保设置了常量。以上将根据您提供的示例代码帮助您实现这一目标。是否使用面向对象的类由您决定,具体取决于代码的复杂性。您是否需要在多种情况下使用该类?您可以通过类对象定义数组,这同样适用于调用函数。见php.net/manual/en/language.oop5.php
    【解决方案2】:

    我知道这会涉及很多isset(),但是是的,这是我能想到的最佳解决方案

    function set_val($vals){
        isset($val['val']) ? define('VAL,$val['val']); : 'false'; //Ignore false
    

    【讨论】:

    • 常量的存在不是用isset检查的,而是用定义的,au2.php.net/defined
    • 代码正在检查 $val[...] 的存在而不是常量
    猜你喜欢
    • 2019-10-31
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 2018-08-29
    相关资源
    最近更新 更多