final protected function verify_protected_methods() {
        $properties = static::properties_definition();

        foreach ($properties as $property => $definition) {
            $method = 'get_' . $property;
            if (method_exists($this, $method)) {
                $reflection = new ReflectionMethod($this, $method);
                if (!$reflection->isProtected()) {
                    throw new coding_exception('The method ' . get_class($this) . '::'. $method . ' should be protected.');
                }
            }
            $method = 'set_' . $property;
            if (method_exists($this, $method)) {
                $reflection = new ReflectionMethod($this, $method);
                if (!$reflection->isProtected()) {
                    throw new coding_exception('The method ' . get_class($this) . '::'. $method . ' should be protected.');
                }
            }
        }
    }