2010-02-14 15 views
24

तो मैं निम्नलिखित की तरह कुछ है:संचालक के रूप में एक चर का उपयोग करना

$a = 3; 
$b = 4; 
$c = 5; 
$d = 6; 

और मैं की तरह

if($a>$b || $c>$d) { echo 'yes'; }; 

बस इतना ही काम करता है ठीक एक तुलना चलाते हैं। ऑपरेटर के स्थान पर एक चर का उपयोग करना संभव है? कुछ की तरह:

$e = ||; 

कौन सा मैं तो

if($a>$b $e $c>$d) { echo 'yes'; }; 

उत्तर

21

नहीं, यह वाक्यविन्यास उपलब्ध नहीं है। सबसे अच्छा तुम कर सकते हो एक eval() है, जो अनुशंसित नहीं किया जाएगा, वे है, खासकर अगर $ ई एक मामले

switch($e) 
{ 
    case "||": 
     if($a>$b || $c>$d) 
      echo 'yes'; 
    break; 
} 
0

नहीं, कोई रास्ता नहीं है के रूप में इस्तेमाल कर सकते हैं फिर से परिभाषित ऑपरेटरों (या चर ऑपरेटरों का उपयोग) पीएचपी AFAIK में।

eval() का उपयोग कर के लघु, निकटतम मैं के बारे में सोच सकते हैं एक समारोह पैदा कर रही है:

function my_operator ($cond1, $cond2) 
{ 
    if (.... ) 
    return ($cond1 || $cond2); 
    else 
    return ($cond1 && $cond2); 

} 

if (my_operator(($a > $b), ($c > $d))) 
.... 
1

नहीं, यह संभव नहीं है।

1
के रूप में प्रत्येक ऑपरेटर के साथ उपयोगकर्ता इनपुट (यानी, एक फार्म), या एक स्विच बयान से आया

नहीं। PHP में ऐसा करने का कोई तरीका नहीं है।

0

आप eval का उपयोग कर सकते हैं, लेकिन यदि आप बहुत सावधान नहीं हैं तो आप आसानी से कोड इंजेक्शन हमलों के सभी प्रकारों पर अपनी साइट को उजागर कर सकते हैं।

एक सुरक्षित समाधान एक पूर्वनिर्धारित सफेद सूची के खिलाफ प्रस्तावित ऑपरेटर से मेल खाना होगा और फिर ऑपरेटर के साथ कोड को कोड किए जाने पर एक बिट बिट को कॉल करना होगा।

सी

11

यह संभव नहीं है, लेकिन आप एक समारोह के बजाय इस्तेमाल कर सकते हैं। बेशक, आपको उन्हें स्वयं परिभाषित करना होगा। यह काफी सरल पीएचपी 5.3 के बंद होने का उपयोग कर होगा:

$or = function($x, $y) 
{ 
    return $x || $y; 
}; 

if ($or($a > $b, $c > $d)) 
{ 
    echo 'yes'; 
}; 
+1

+1। बंद एफटीडब्ल्यू। – outis

3

भविष्य खोजकर्ताओं के लिए, यहाँ एक समारोह मैं जब मैं एक सूची की संख्या कम करने के लिए कुछ अस्पष्ट और अपरिभाषित "अतिरिक्त मापदंड" जोड़ने के लिए एक आवश्यकता थी के साथ आया है उत्पादों का

/** 
* Criteria checker 
* 
* @param string $value1 - the value to be compared 
* @param string $operator - the operator 
* @param string $value2 - the value to test against 
* @return boolean - criteria met/not met 
*/ 
protected function criteriaMet($value1, $operator, $value2) 
{ 
    switch ($operator) { 
     case '<': 
      return $value1 < $value2; 
      break; 
     case '<=': 
      return $value1 <= $value2; 
      break; 
     case '>': 
      return $value1 > $value2; 
      break; 
     case '>=': 
      return $value1 >= $value2; 
      break; 
     case '==': 
      return $value1 == $value2; 
      break; 
     case '!=': 
      return $value1 != $value2; 
      break; 
     default: 
      return false; 
    } 
    return false; 
} 

(संपादित) यहाँ मैं इसे कैसे इस्तेमाल किया है:

// Decode the criteria 
$criteria = json_decode($addl_criteria); 

// Check input against criteria 
foreach ($criteria as $item) { 
    // Criteria fails 
    if (!criteriaMet($input[$item->key)], $item->operator, $item->value)) { 
     return false; 
    } 
} 
संबंधित मुद्दे