oop - Getting unexpected warnings from theme options code

Actually i have built my own class for registering theme options, and it works fine, but once i started to make some arr

Actually i have built my own class for registering theme options, and it works fine, but once i started to make some arrangements warnings started to show and i can't catch what wrong have i done.

I will explain the old and new code to help you understand the problem.

Working

The following constructor accepts three arrays that represents menu items, settings (sections/fields) and widgets.

public function __construct($menu = array(), $sections = array(), $widgets = array())

within the constructor i started to set properties and call required hooks for settings page, which should register settings and fields using corresponding callbacks. each field should be rendered dynamically according to its class name, something like $render = new $field_class($field, $value, $this); (Each field has it's own class that extends the theme settings class. i will show you later).

The field render method

 /**
  * class section fields callback function
  */
    public function field_input($field){
        if(isset($field['callback']) && function_exists($field['callback'])){
        }
        if(isset($field['type'])){
            $field_class = 'ANONY_optf__'.ucfirst($field['type']);
            if(class_exists($field_class)){
                $fieldID = $field['id'];
                $fieldDefault = isset($field['default']) ? $field['default'] : '';
                $value = (isset($this->options->$fieldID))? $this->options->$fieldID : $fieldDefault;                   
                $render = new $field_class($field, $value, $this);
                $render->render();
            }
        }
    }

Each field class accepts three arguments, $field that contains field data (e.g. id, label, type), $value of the option corresponds to the field id and an object of parent class $this.

Then in the field specific class, the following code. (The problem is within the constructor so i just wrote it)

class ANONY_optf__Switch extends ANONY__Theme_Settings{ 

function __construct( $field = array(), $value ='', $parent = NULL ){
    if( is_object($parent) ) parent::__construct($parent->sections, $parent->args);
    $this->field = $field;
    $this->value = $value;  
}
}

As you can see the switch field extends theme setting class.

Not working

until here every thing is fine, but once i started to move some lines from parent class (Field render method) to the field specific constructor, warnings started to show.

So the render function became like this

public function field_input($field){

        if(isset($field['callback']) && function_exists($field['callback'])){

        }
        //Array of inputs that have same HTML markup
        $mixed_types = ['text','number','email', 'password','url'];

        if(isset($field['type'])){
            $field_class = 'ANONY_optf__'.ucfirst($field['type']);

            //Static class name for inputs that have same HTML markup
            if(in_array($field['type'], $mixed_types)) $field_class = 'ANONY_optf__Mixed';
            
            if(class_exists($field_class)){
                                    
                $field = new $field_class($field, $this);
                
                $field->render();
            }
        }
    }

And the field specific constructor:

function __construct( $field = array(), $parent = NULL ){
    if( is_object($parent) ) parent::__construct($parent->sections, $parent->args, $parent->widgets);

    $this->field = $field;

    $fieldID = $this->field['id'];
                
    $fieldDefault = isset($this->field['default']) ? $this->field['default'] : '';

    $this->value = (isset($parent->options->$fieldID))? $parent->options->$fieldID : $fieldDefault;
}

After this i am getting:

Warning: Illegal string offset 'id'.

Notice: Uninitialized string offset: 0.

while i've just moved the code from parent to child.

I don't know if could explain what has happened, so you can understand the problem. but i hope you can help, and sure i am ready to explain more if needed. Thanks in advance.

Note

Warnings are showing but also everything is rendered correctly. Which it may mean that something is called twice but first time it couldn't find values.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745271399a4619767.html

相关推荐

  • oop - Getting unexpected warnings from theme options code

    Actually i have built my own class for registering theme options, and it works fine, but once i started to make some arr

    2小时前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信