2017-03-27 11 views
0

このケースの他の結果を探しましたが、自分で修正できませんでした。誰かがはあなたが別の関数を使用したい理由は少し不明であるpreg_replace_callbackpreg_replaceをpreg_replace_callbackに変更する

preg_replace("/[-_]([a-z])/e", "ucfirst('\\1')", ucwords($verb)); 

<?php 

/** @see Zang_Exception **/ 
require_once 'Exception.php'; 

/** @see Zang_Schemas **/ 
require_once 'Schemas.php'; 

/** 
* 
* A Zang InboundXML wrapper. 
* 
* Please consult the online documentation for more details. 
* Online documentation can be found at: http://www.zang.io/docs/api/inboundxml/ 
* 
* -------------------------------------------------------------------------------- 
* 
* @category Zang Wrapper 
* @package Zang 
* @author Nevio Vesic <[email protected]> 
* @license http://creativecommons.org/licenses/MIT/ MIT 
* @copyright (2012) Zang, Inc. <[email protected]> 
*/ 

class Zang_InboundXML 
{ 

    /** 
    * InboundXML simple xml element container 
    * 
    * @var null|SimpleXmlElement 
    */ 
    protected $element; 

    /** 
    * Current child pointer. Used for nesting validations 
    * 
    * @var string|null 
    */ 
    protected $_currentChild = null; 

    /** 
    * Constructs a InboundXML response. 
    * 
    * @param SimpleXmlElement|array $arg: 
    * - the element to wrap 
    * - attributes to add to the element 
    * - if null, initialize an empty element named 'Response' 
    */ 
    public function __construct($arg = null) { 
     switch (true) { 
      case $arg instanceof SimpleXmlElement: 
       $this->element = $arg; 
       $this->_currentChild = strtolower($arg->getName()); 
       break; 
      case $arg === null: 
       $this->element = new SimpleXmlElement('<Response/>'); 
       $this->_currentChild = 'response'; 
       break; 
      case is_array($arg): 
       $this->element = new SimpleXmlElement('<Response/>'); 
       $this->_currentChild = 'response'; 
       foreach ($arg as $name => $value) { 
        $this->_validateAttribute($name, 'response'); 
        $this->element->addAttribute($name, $value); 
       } 
       break; 
      default: throw new Zang_Exception('InboundXML Invalid construction argument'); 
     } 
    } 


    /** 
    * Converts method calls into InboundXML verbs. 
    * 
    * @return SimpleXmlElement A SimpleXmlElement 
    */ 
    public function __call($verb, array $args) { 

     /** convert verbs input like-this-one to LikeThisOne **/ 
     $verb = preg_replace("/[-_]([a-z])/e", "ucfirst('\\1')", ucwords($verb)); 

     /** Let's first go check if the verb exists **/ 
     $this->_validateVerb(ucfirst($verb)); 

     /** Let's go validate nesting **/ 
     $this->_validateNesting(ucfirst($verb)); 

     list($noun, $attrs) = $args + array('', array()); 

     if (is_array($noun)) list($attrs, $noun) = array($noun, ''); 

     $child = empty($noun) 
      ? $this->element->addChild(ucfirst($verb)) 
      : $this->element->addChild(ucfirst($verb), $noun); 

     foreach ($attrs as $name => $value) { 
      /** Validation of verb attributes **/ 
      $this->_validateAttribute($name, $verb); 
      $child->addAttribute($name, $value); 
     } 
     return new self($child); 

    } 


    /** 
    * Returns the object as XML. 
    * 
    * @return string The response as an XML string 
    */ 
    public function __toString() { 
     $xml = $this->element->asXml(); 
     return str_replace(
      '<?xml version="1.0" ?>', 
      '<?xml version="1.0" encoding="UTF-8" ?>', 
      $xml 
     ); 
    } 


    /** 
    * Validate existance of the verb. Return true if exists, throw exception 
    * if fails. 
    * 
    * @param string $verb 
    * @throws Zang_Exception 
    * @return bool 
    */ 
    private function _validateVerb($verb) { 
     $schemas = Zang_Schemas::getInstance(); 

     if(!$schemas->isVerb(ucfirst($verb))) { 
      $available_verbs = implode(', ', $schemas->getAvailableVerbs()); 
      throw new Zang_Exception(
       "Verb '{$verb}' is not a valid InboundXML verb. Available verbs are: '{$available_verbs}'" 
      ); 
     } 

     return true; 
    } 


    /** 
    * Validate if previous child allows this verb to be its child. 
    * 
    * @param string $verb 
    * @return boolean 
    * @throws Zang_Exception 
    */ 
    private function _validateNesting($verb) { 
     $schemas = Zang_Schemas::getInstance(); 

     if(!$schemas->isNestingAllowed(ucfirst($this->_currentChild), ucfirst($verb))) { 
      $nestable_verbs = implode(', ', $schemas->getNestableByVerbs(ucfirst($this->_currentChild))); 
      $current_verb = ucfirst($this->_currentChild); 
      $next_verb  = ucfirst($verb); 
      throw new Zang_Exception(
       "InboundXML element '{$current_verb}' does not support '{$next_verb}' element. The following elements are supported: '{$nestable_verbs}'." 
      ); 
     } 

     return true; 
    } 


    /** 
    * Validate if attribute of verb exists. If not, throw exception, otherwise, return true. 
    * 
    * @param string $attr 
    * @param string $verb 
    * @return boolean 
    * @throws Zang_Exception 
    */ 
    private function _validateAttribute($attr, $verb) { 
     $schemas = Zang_Schemas::getInstance(); 

     if(!$schemas->isValidAttribute($attr, ucfirst($verb))) { 
      $verb_attribuges = implode(', ', $schemas->getAvailableAttributes(ucfirst($verb))); 
      throw new Zang_Exception(
       "Attribute '{$attr}' does not exist for verb '{$verb}'. Available attributes are: '{$verb_attribuges}'" 
      ); 
     } 
     return true; 
    } 

} 
+2

実際に何をしたいのかを知らせなくてもこれに答えることはできないので、別の機能を使いたいのですが? – arkascha

+0

私はあなたが正確に見ることができるようにページ全体を追加しました – Frezzy

+0

理由を教えてください。 – arkascha

答えて

0

でこれにpreg_replaceの交換で私を助けることができる場合、私は感謝するでしょう。これはかもしれませんこれはphpをアップグレードしていて、e修飾子はもうサポートされていないからです。そして、あなたは

は、この簡単なデモを見てみましょう... あなたはハイフンを回し、キャメルケースに連結された表現を強調しようとしているを示唆掲載のコード例:明らかに

<?php 
$verb = 'this is a simple-test_sentence to convert.'; 
echo preg_replace_callback(
    "/[-_]([a-z]+)/", 
    function($string) { return ucfirst($string[1]); }, 
    ucwords($verb) 
); 

出力は次のようになります。

これは、変換するSimpleTestSentenceです。

+0

もう一度、ありがとう! – Frezzy

関連する問題