In der vorherigen Lektion haben wir den Code über ein Shell-Skript kopiert und etwas über statische Methoden und statische Eigenschaften gelernt. (Es gibt auch ein zusätzliches PHAR-Paket, aber ich habe es einfach ignoriert)
Dann habe ich einige Parameter in die GOD-Datei geschrieben,
Wir können die Methodennamen auch wie eine Zeichenfolge zusammenfügen.
<span style="color: #800080;">$get_param</span>=<span style="color: #800080;">$argv</span>[1<span style="color: #000000;">]; godinit</span>::<span style="color: #800080;">$get_param</span>();
OK, folgen wir dem Kurs des Lehrers, um die Anforderungen umzusetzen: Wenn der Parameter „-“ enthält, bedeutet dies, dass es sich um ein Attribut handelt. Rufen Sie direkt die statischen Eigenschaften der Klasse auf. Wenn kein „-“ vorhanden ist, bedeutet dies, dass es sich um eine Methode handelt, und wir rufen direkt die statische Methode der Klasse auf.
Also habe ich zuerst die God-Datei, die ich in der vorherigen Klasse geschrieben habe, wie folgt geändert:
<span style="color: #008000;">#</span><span style="color: #008000;">!/usr/local/bin/php</span> <?<span style="color: #000000;">php </span><span style="color: #0000ff;">require</span>('god_func7'<span style="color: #000000;">); </span><span style="color: #0000ff;">require</span>("godinit.php"<span style="color: #000000;">); </span><span style="color: #800080;">$result</span>=''<span style="color: #000000;">; </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$argc</span>>=2<span style="color: #000000;">) { </span><span style="color: #008000;">/*</span><span style="color: #008000;">'-v'==$argv[1] && $result=godinit::$V; 'make'==$argv[1] && $result=godinit::make(); 'init'==$argv[1] && $result=godinit::init();</span><span style="color: #008000;">*/</span> <span style="color: #800080;">$p</span> = <span style="color: #800080;">$argv</span>[1]; <span style="color: #008000;">//</span><span style="color: #008000;">获取参数</span> <span style="color: #0000ff;">if</span>(<span style="color: #008080;">substr</span>(<span style="color: #800080;">$p</span>,0,1)=='-') <span style="color: #008000;">//</span><span style="color: #008000;"> 代表获取并匹配变量,</span> <span style="color: #000000;"> { </span><span style="color: #008000;">//</span><span style="color: #008000;">如果传过来的是-v,就会变成v</span> <span style="color: #800080;">$p</span> = <span style="color: #008080;">substr</span>(<span style="color: #800080;">$p</span>,1<span style="color: #000000;">); </span><span style="color: #800080;">$result</span> = godinit::$<span style="color: #800080;">$p</span><span style="color: #000000;">; }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{ </span><span style="color: #800080;">$result</span> = godinit::<span style="color: #800080;">$p</span><span style="color: #000000;">(); } } </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$result</span><span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> <span style="color: #ff00ff;">PHP_EOL</span><span style="color: #000000;">; </span>?>
Das Ergebnis ist wie folgt:
Wir kehren zur obigen Befehlszeile zurück. Wenn wir ein anderes Zeichen als -v ausgeben, tritt ein Fehler auf, sodass wir den Code noch verbessern müssen.
<span style="color: #800080;">$p</span> = <span style="color: #800080;">$argv</span>[1]; <span style="color: #008000;">//</span><span style="color: #008000;">获取参数</span> <span style="color: #0000ff;">if</span>(<span style="color: #008080;">substr</span>(<span style="color: #800080;">$p</span>,0,1)=='-') <span style="color: #008000;">//</span><span style="color: #008000;"> 代表获取并匹配变量,</span> <span style="color: #000000;"> { </span><span style="color: #008000;">//</span><span style="color: #008000;">如果传过来的是-v,就会变成v</span> <span style="color: #800080;">$p</span> = <span style="color: #008080;">substr</span>(<span style="color: #800080;">$p</span>,1<span style="color: #000000;">); </span><span style="color: #800080;">$result</span> =<span style="color: #0000ff;">isset</span>(godinit::$<span style="color: #800080;">$p</span>)?godinit::<span style="color: #800080;">$p</span>:<span style="color: #000000;">error; }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{ </span><span style="color: #800080;">$result</span> = godinit::<span style="color: #800080;">$p</span><span style="color: #000000;">(); }</span>
Hier verwenden wir eine magische PHP-Funktion __callStatic($m,$args). Wenn Sie diese Methode verwenden möchten, muss sie in der Klasse geschrieben und statisch sein. Wenn Sie eine undefinierte statische Methode aufrufen, wird diese Funktion automatisch ausgelöst. Der erste Parameter ist der Methodenname und der zweite Parameter ist der Methodenparameter. Wir können es zur Fehlertoleranz verwenden (sofern wir dies lernen). In der Godinit-Datei fügen wir diese Methode hinzu:
<span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> __callStatic(<span style="color: #800080;">$p1</span>,<span style="color: #800080;">$p2</span><span style="color: #000000;">){ </span><span style="color: #0000ff;">echo</span> '$p1'<span style="color: #000000;">; }<br></span>
Dann schauen wir uns die Ergebnisse an:
Schauen wir uns nun die allgemeine Klassendefinition, Instanziierung und Aufruf an. Erstellen wir eine neue Godconfig-Datei und eine Godconfig-Klasse nur mit Attributen
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> godconfig { </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$prj_name</span><span style="color: #000000;">; </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$prj_author</span><span style="color: #000000;">; } </span>?>
Um die Klasse godconfig in godinit zu instanziieren, verwenden Sie 1. json_encode (Klasse nach der Instanziierung): Gibt einen String im JSON-Format zurück. 2. json_decode (JSON-String): Gibt ein Objekt zurück.
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">require</span>('godconfig.php'); <span style="color: #008000;">//</span><span style="color: #008000;">引入gonconfig这个文件</span> <span style="color: #0000ff;">class</span> godinit <span style="color: #008000;">//</span><span style="color: #008000;">创建一个类,godinit</span> <span style="color: #000000;">{ </span><span style="color: #0000ff;">static</span> <span style="color: #800080;">$v</span>="god version is 1.2"; <span style="color: #008000;">//</span><span style="color: #008000;">声明一个静态属性$VERSION</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> init() <span style="color: #008000;">//</span><span style="color: #008000;">静态方法 init</span> <span style="color: #000000;"> { </span><span style="color: #800080;">$gc</span> = <span style="color: #0000ff;">new</span> godconfig(); <span style="color: #008000;">//</span><span style="color: #008000;">实例化godconfig里定义的类</span> <span style="color: #0000ff;">echo</span> "input your project name?".<span style="color: #ff00ff;">PHP_EOL</span><span style="color: #000000;">; </span><span style="color: #800080;">$gc</span> -> prj_name = <span style="color: #008080;">fgets</span>(STDIN); <span style="color: #008000;">//</span><span style="color: #008000;">从标准输入中获取用户输入的字符并赋值给实例化属性$prj_name</span> <span style="color: #0000ff;">echo</span> "input your author name?".<span style="color: #ff00ff;">PHP_EOL</span><span style="color: #000000;">; </span><span style="color: #800080;">$gc</span> -> prj_author=<span style="color: #008080;">fgets</span><span style="color: #000000;">(STDIN); </span><span style="color: #800080;">$ret</span> = <span style="color: #0000ff;">array</span>(); <span style="color: #008000;">//</span><span style="color: #008000;">初始化一个数组;</span> <span style="color: #800080;">$ret</span>[] = <span style="color: #800080;">$gc</span><span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> json_encode(<span style="color: #800080;">$ret</span><span style="color: #000000;">); </span><span style="color: #008000;">//</span><span style="color: #008000;">return ""</span> <span style="color: #000000;"> } </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> __callStatic(<span style="color: #800080;">$p1</span>,<span style="color: #800080;">$p2</span><span style="color: #000000;">){ </span><span style="color: #0000ff;">echo</span> "error function"<span style="color: #000000;">; } } </span>?>
Dann schauen wir uns die Ergebnisse an:
Um einige einfache Wissenspunkte auszugleichen:
()? (): ();
substr();
isset();
__callStatic($m,$args)
json_encode()
json_decode()
Urheberrechtserklärung: Hinweis-Organisator Desperado liebt die Freiheit und befürwortet das Teilen. Aber dieser Hinweis stammt von www.jtthink.com (Programmer on the Road) „The First Stage of PHP Devil Training Course“ von Lehrer Shen Yi. Diese Studiennotiz wurde zuerst im Blog veröffentlicht. Wenn Sie sie erneut drucken müssen, respektieren Sie bitte die Arbeit des Lehrers und behalten Sie die Unterschrift von Lehrer Shen Yi und die Kursquellenadresse.
Vorherige Lektion: Spezielle PHP-Trainingsnotizen von Lehrer Shen Yi (3)
Nächste Lektion: