Heim  >  Artikel  >  Backend-Entwicklung  >  Verfolgt! PHP-String-Array-Schnittpunkt

Verfolgt! PHP-String-Array-Schnittpunkt

WBOY
WBOYOriginal
2016-08-04 09:20:081047Durchsuche

<code>$where = '1=1';
$keyword = $_GET['keyword'];
        
if($keyword) {
    $where['title'] = array('like', "%$keyword%");
}

var_dump($where);

竟然打印出来:A=1

到底是怎么样的转换流程?</code>

Antwortinhalt:

<code>$where = '1=1';
$keyword = $_GET['keyword'];
        
if($keyword) {
    $where['title'] = array('like', "%$keyword%");
}

var_dump($where);

竟然打印出来:A=1

到底是怎么样的转换流程?</code>

Lass mich zunächst einmal klagen (wenn du dich nicht beschwerst, wirst du sterben!):

  1. $where ist eine Zeichenfolge. Was zum Teufel ist das $where['title'], das du geschrieben hast?

  2. Sie weisen einer Zeichenfolge innerhalb einer Zeichenfolge ein array zu. Was zum Teufel ist das?

Nachdem ich einige verschiedene und nutzlose Codes aus Ihrer Frage entfernt habe, habe ich die Frage vereinfacht:

<code>$where = '1=1';
$where['title'] = array();
var_dump($where);</code>

Entspricht der obigen Beschwerde, schauen wir uns dies Schritt für Schritt an:
$where['title'] drückt die Zeichen mit dem Index $where in der Zeichenfolge 'title' aus. Beachten Sie, dass der zulässige Wert des Index [ ist. 0 -Stringlänge minus 1], dann hat PHP tatsächlich den gleichen Effekt wie $where[0] für illegale Indizes.
Dieses Problem wird weiter vereinfacht zu:

<code>$where = '1=1';
$where[0] = array();
var_dump($where);</code>

Verstanden, dass sich $where[0] tatsächlich auf das erste Zeichen der $where-Zeichenfolge bezieht, daher möchte ich mich über Folgendes beschweren: „Sie weisen einer Zeichenfolge in einer Zeichenfolge ein array zu, was Zum Teufel ist das so? "
Machen wir einen Test:

<code>var_dump( (string)array() );</code>

Was wird Ihrer Meinung nach ausgegeben?

<code>PHP Notice:  Array to string conversion in /home/nfer/temp.php on line 8
string(5) "Array"</code>

Dann ist es hier leicht zu verstehen, $where[0] = array(); dem ersten Zeichen der Zeichenfolge Array zuzuordnen. $whereBingo, die Ausgabe ist
string(3) "A=1"

Lassen Sie mich zum Schluss noch einen

Spukcode schreiben:

<code>$where = 'A=1';
$keyword = $_GET['keyword'];
        
if($keyword) {
    $where['title'] = $keyword == 123;
}

var_dump($where);</code>
Was wird Ihrer Meinung nach das Ergebnis sein?

1.$wo = 1, das ist richtig, erstens ist dies eine Zeichenfolge.

2. Dann behandeln Sie $where als Array und weisen $where['title'] = array('like',"xxx") zu.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn