目次
MordenPHP阅读笔记(一)——先跑再说,跑累了再走,mordenphp先跑
ホームページ php教程 php手册 MordenPHP阅读笔记(一)先跑再说,跑累了再走,mordenphp先跑

MordenPHP阅读笔记(一)先跑再说,跑累了再走,mordenphp先跑

Jun 13, 2016 am 08:41 AM
1つ ノート 読む

MordenPHP阅读笔记(一)——先跑再说,跑累了再走,mordenphp先跑

---恢复内容开始---

  后台一大堆半成品,或者是几乎不成的。。。

这本书不错,起码是别人推荐的,然后也是比较新的东西,学哪本不是学嘛,关键是得看。

今儿个网不好,科研所需的代码下不到,看书做笔记吧。

这本书基本将的是5.4版本后的一些新变化,写的浅显易懂,虽然鄙人走的还不顺溜,跑一跑也摔不到哪儿去,跑累了我有的是走的机会~~

(一)特性

一、命名空间

一个文件一个类,用了命名空间方便互相调用;

<span> 1</span> <span>//</span>
<span> 2</span> <span>//Namespace
</span><span> 3</span> <span>//</span>
<span> 4</span> <span>namespace ModernPHP\feature\mingmingkongjian;
</span><span> 5</span> <span>function</span> <span>var_dump</span><span>(){
</span><span> 6</span>     <span>echo</span> "Shit!"."</br>"<span>;
</span><span> 7</span> <span>}
</span><span> 8</span> 
<span> 9</span> <span>$test</span>="OK"<span>;
</span><span>10</span> <span>var_dump</span>(<span>$test</span><span>);
</span><span>11</span> \ModernPHP\feature\mingmingkongjian\<span>var_dump</span><span>();
</span><span>12</span> 
<span>13</span> <span>//</span><span>命名空间必须顶头,但一个文件中可以有很多命名空间,然后也可以有子空间
</span><span>14</span> <span>//厂商的命名空间是最顶层的命名空间,用于识别品牌
</span><span>15</span> <span>//旨在解决命名冲突的问题,当然现在应该有比较灵活的其他用法
</span><span>16</span> 
<span>17</span> <span>//一个比较实用的点:导入和别名
</span><span>18</span> <span>//导入另一个文件夹下的类定义,直接用</span>
<span>19</span> <span>require</span> 'index.php'<span>;
</span><span>20</span> <span>use</span><span> a\aaa;
</span><span>21</span> <span>$daoru</span>=<span>new</span><span> aaa;
</span><span>22</span> <span>$daoru</span>-><span>send();
</span><span>23</span> <span>//</span><span>use是导入,然后在use中设置最懒的别名
</span><span>24</span> <span>//另外,5.6版本后可以实现use 函数
</span><span>25</span> <span>// use func a\call;
</span><span>26</span> <span>// \a\call();</span>
ログイン後にコピー

index.php

<span> 1</span> <?<span>php
</span><span> 2</span> <span>namespace a;
</span><span> 3</span> <span>class</span><span> aaa{
</span><span> 4</span>     <span>public</span> <span>function</span><span> send(){
</span><span> 5</span>         <span>echo</span> "ok"<span>;
</span><span> 6</span> <span>    }
</span><span> 7</span> <span>}
</span><span> 8</span> 
<span> 9</span> <span>function</span><span> call(){
</span><span>10</span>     <span>echo</span> "func_use is successful."<span>;
</span><span>11</span> }
ログイン後にコピー

二、使用接口

接口,本来没太懂,看懂了之后简直了,牛逼啊!

一个接口,大家只要遵守接口规定,就都能用,就这么个意思。

下面是一个获得内容的接口示例,还可以写更多基于此接口的模块;(其中,模块中getContent的我基本都不会。。。哭)

<?<span>php
</span><span>//</span><span>
//Chapter2.P19
//Feature_Interface
//</span>
<span>namespace ModernPHP\feature\jiekou;



</span><span>class</span><span> DocumentStore{
    </span><span>protected</span> <span>$data</span>=<span>[];
    
    </span><span>public</span> <span>function</span> addDocument(Documentable <span>$document</span>){  <span>//</span><span>这里注明只能使用接口的参数</span>
        <span>$key</span>=<span>$document</span>-><span>getID();
        </span><span>$value</span>=<span>$document</span>-><span>getContent();
        </span><span>$this</span>->data[<span>$key</span>]=<span>$value</span><span>;
    }
    
    </span><span>public</span> <span>function</span><span> getDocuments(){
        </span><span>return</span> <span>$this</span>-><span>data;
    }
}

</span><span>interface</span> Documentable{     <span>//</span><span>定义接口,说白了就是定规矩,其他地方要用,就得说一声</span>
    <span>public</span> <span>function</span><span> getId();
    
    </span><span>public</span> <span>function</span><span> getContent();
}

</span><span>class</span> HtmlDocument <span>implements</span> Documentable{   <span>//</span><span>声明要用接口;这个是获得url的内容的</span>
    <span>protected</span> <span>$url</span><span>;
    
    </span><span>public</span> <span>function</span> __construct(<span>$url</span><span>){
        </span><span>$this</span>->url=<span>$url</span><span>;
    }
    
    </span><span>public</span> <span>function</span><span> getId(){
        </span><span>return</span> <span>$this</span>-><span>url;
    }
    
    </span><span>public</span> <span>function</span><span> getContent(){
        </span><span>$ch</span>=curl_init();   <span>//</span><span>这里的curl是针对url进行操作一个库(相当于)。这个命令是开启一个curl对话,所以下面这些都是一个对话</span>
        curl_setopt(<span>$ch</span>, CURLOPT_URL, <span>$this</span>-><span>url);
        curl_setopt(</span><span>$ch</span>, CURLOPT_RETURNTRANSFER, 1<span>);
        curl_setopt(</span><span>$ch</span>,CURLOPT_CONNECTTIMEOUT,3<span>);
        curl_setopt(</span><span>$ch</span>,CURLOPT_FOLLOWLOCATION,1<span>);
        curl_setopt(</span><span>$ch</span>,CURLOPT_MAXREDIRS,3<span>);
        </span><span>$html</span>=curl_exec(<span>$ch</span>);   <span>//</span><span>由这个命令执行刚才的对话</span>
        curl_close(<span>$ch</span><span>);
        
        </span><span>return</span> <span>$html</span><span>;
    }
}




</span><span>$documentStore</span>=<span>new</span><span> DocumentStore();

</span><span>$htmlDoc</span>=<span>new</span> HtmlDocument('http://www.baidu.com'<span>);
</span><span>$documentStore</span>->addDocument(<span>$htmlDoc</span><span>);



</span><span>print_r</span>(<span>$documentStore</span>->getDocuments());
ログイン後にコピー

另一个模块

<span> 1</span> <span>class</span> StreamDocument <span>implements</span> Documentable{  <span>//</span><span>流媒体</span>
<span> 2</span>     <span>protected</span> <span>$resource</span><span>;
</span><span> 3</span>     <span>protected</span> <span>$buffer</span>;   <span>//</span><span>缓冲区大小</span>
<span> 4</span>     
<span> 5</span>     <span>public</span> <span>function</span> __construct(<span>$resource</span>,<span>$buffer</span>=4096<span>){
</span><span> 6</span>         <span>$this</span>-><span>resource</span>=<span>$resource</span><span>;
</span><span> 7</span>         <span>$this</span>->buffer=<span>$buffer</span><span>;
</span><span> 8</span> <span>    }
</span><span> 9</span>     
<span>10</span>     <span>public</span> <span>function</span><span> getId(){
</span><span>11</span>         <span>return</span> 'resource-'.(int)<span>$this</span>-><span>resource</span><span>;
</span><span>12</span> <span>    }
</span><span>13</span>     
<span>14</span>     <span>public</span> <span>function</span><span> getContent(){
</span><span>15</span>         <span>$streamContent</span>=''<span>;
</span><span>16</span>         <span>rewind</span>(<span>$this</span>-><span>resource</span>); <span>//</span><span>rewind() 函数将文件指针的位置倒回文件的开头</span>
<span>17</span>         <span>while</span> (<span>feof</span>(<span>$this</span>-><span>resource</span>)===<span>false</span>){    <span>//</span><span>feof() 函数检测是否已到达文件末尾 (eof)。</span>
<span>18</span>             <span>$streamContent</span>.=<span>fread</span>(<span>$this</span>-><span>resource</span>,<span>$this</span>-><span>buffer);
</span><span>19</span> <span>        }
</span><span>20</span>         
<span>21</span>         <span>return</span> <span>$streamContent</span><span>;
</span><span>22</span> <span>    }
</span><span>23</span> }
ログイン後にコピー

三、性状

奇怪的东西。。。

其实就是为了多重继承或者一对多个不同的类别吧

<span> 1</span> <?<span>php
</span><span> 2</span> <span>//</span>
<span> 3</span> <span>//Chapter2.P23
</span><span> 4</span> <span>//Feature_Trait
</span><span> 5</span> <span>//性状
</span><span> 6</span> <span>//
</span><span> 7</span> 
<span> 8</span> <span>//前面说的接口,是针对同类型的东西,实现相同的功能的;
</span><span> 9</span> <span>//这里的性状是针对不同的东西,实现相同的功能
</span><span>10</span> 
<span>11</span> <span>//基本用法如下</span>
<span>12</span> <span>trait traitName{
</span><span>13</span>     <span>public</span> <span>function</span><span> testThis(){
</span><span>14</span>         <span>echo</span> "This is how trait works."."<br/>"<span>;
</span><span>15</span> <span>    }
</span><span>16</span> <span>}
</span><span>17</span> 
<span>18</span> <span>trait traitMore{
</span><span>19</span>     <span>public</span> <span>function</span><span> testAgain(){
</span><span>20</span>         <span>echo</span> "This is multiple use."."<br/>"<span>;
</span><span>21</span> <span>    }
</span><span>22</span> <span>}
</span><span>23</span> 
<span>24</span> <span>class</span><span> className{
</span><span>25</span>     <span>use</span><span> traitName;
</span><span>26</span>     <span>use</span><span> traitMore;
</span><span>27</span>     
<span>28</span> <span>}
</span><span>29</span> 
<span>30</span> <span>$classMine</span>=<span>new</span><span> className();
</span><span>31</span> <span>$classMine</span>-><span>testThis();
</span><span>32</span> <span>$classMine</span>->testAgain();
ログイン後にコピー

四、生成器

直接上代码

<span> 1</span> <?<span>php
</span><span> 2</span> <span>//</span>
<span> 3</span> <span>//Chapter2.P26
</span><span> 4</span> <span>//Feature_Generator
</span><span> 5</span> <span>//生成器
</span><span> 6</span> <span>//
</span><span> 7</span> 
<span> 8</span> <span>//其实就是在函数中使用了yield语句的东西
</span><span> 9</span> <span>//优点在于节省了内存使用情况
</span><span>10</span> <span>//方法是通过动态分配内存进行循环操作
</span><span>11</span> <span>//典型用处是处理csv类数据文件</span>
<span>12</span> 
<span>13</span> <span>namespace ModernPHP\feature\shengchegnqi;
</span><span>14</span> 
<span>15</span> <span>function</span> getRows(<span>$file</span><span>){
</span><span>16</span>     <span>$handle</span>=<span>fopen</span>(<span>$file</span>,'rb'<span>);
</span><span>17</span>     <span>if</span> (<span>$handle</span>===<span>false</span><span>){
</span><span>18</span>         <span>throw</span> <span>new</span> <span>Exception</span>();  <span>//</span><span>抛出错误原因</span>
<span>19</span> <span>    }
</span><span>20</span>     <span>while</span> (<span>feof</span>(<span>$handle</span>)===<span>false</span><span>) {
</span><span>21</span>         yield <span>fgetcsv</span>(<span>$handle</span><span>);
</span><span>22</span> <span>    }
</span><span>23</span>     <span>fclose</span>(<span>$handle</span><span>);
</span><span>24</span> <span>}
</span><span>25</span> 
<span>26</span> <span>foreach</span> (getRows('data.csv') <span>as</span> <span>$row</span><span>){
</span><span>27</span>     <span>print_r</span>(<span>$row</span><span>);
</span><span>28</span>     <span>echo</span> "<br/>"<span>;
</span><span>29</span> <span>}
</span><span>30</span> <span>//</span><span>当数据文件很大时,效果尤其明显</span>
ログイン後にコピー

五、闭包

这里闭包基本等于匿名函数

<span> 1</span> <?<span>php
</span><span> 2</span> <span>//</span>
<span> 3</span> <span>//Chapter2.P29
</span><span> 4</span> <span>//Feature_ClosePatch
</span><span> 5</span> <span>//闭包或匿名函数
</span><span> 6</span> <span>//
</span><span> 7</span> 
<span> 8</span> <span>//把函数当作是变量
</span><span> 9</span> <span>//然后它就可以像变量一样用来用去了。。
</span><span>10</span> <span>//常用做函数和方法的回调</span>
<span>11</span> 
<span>12</span> <span>namespace ModernPHP\feature\bibao;
</span><span>13</span> <span>$var</span>=<span>function</span> (<span>$name</span><span>){
</span><span>14</span>     <span>return</span> <span>sprintf</span>('Hello %s',<span>$name</span><span>);
</span><span>15</span> <span>};
</span><span>16</span> 
<span>17</span> <span>echo</span> <span>$var</span>('Andy'<span>);
</span><span>18</span> 
<span>19</span> <span>//</span><span>做回调</span>
<span>20</span> <span>$array</span>=[2,3,4<span>];
</span><span>21</span> <span>$num</span>=<span>array_map</span>(<span>function</span> (<span>$number</span>){  <span>//</span><span>array_map,将函数作用到数组中的每个值上,每个值都乘以本身,并返回带有新值的数组</span>
<span>22</span>     <span>return</span> <span>$number</span>+1<span>;
</span><span>23</span> },<span>$array</span><span>);
</span><span>24</span> <span>print_r</span>(<span>$num</span>);
ログイン後にコピー

六、附加状态

这个没搞懂。。。

(二)标准

PHP-FIG的一些约定俗成;

---类名称,驼峰式,ShitHappens

---方法名称,驼峰式,但首字母小写,shitHappens

---缩进统一为4个空格

---不写?>结束符号;

---{另起一行;

---命名空间要有空格;

---类中属性和方法必须有可见性声明;

---if等控制性结构后面有空格;

<span> 1</span> <?<span>php
</span><span> 2</span> <span>//</span>
<span> 3</span> <span>//Chapter3.P44
</span><span> 4</span> <span>//PHP-FIG puts PSRs
</span><span> 5</span> <span>//</span>
<span> 6</span> 
<span> 7</span> <span>namespace ModernPHP\standard\realize;
</span><span> 8</span> 
<span> 9</span> <span>use</span><span> ModernPHP\feature\bibao;
</span><span>10</span> <span>use</span><span> ModernPHP\feature\fujiazhuangtai;
</span><span>11</span> 
<span>12</span> <span>class</span><span> ShitHappens
</span><span>13</span> <span>{
</span><span>14</span>     <span>public</span> <span>$a</span><span>;
</span><span>15</span>     
<span>16</span>     <span>public</span> <span>function</span><span> suck()
</span><span>17</span> <span>    {
</span><span>18</span>         <span>if</span> (<span>$this</span>->a===<span>false</span><span>){
</span><span>19</span>             <span>return</span> <span>true</span><span>;
</span><span>20</span> <span>        }
</span><span>21</span> <span>    }
</span><span>22</span> }
ログイン後にコピー

 

----------------------

后面的都是讲述的东西,有需要的我再写吧。 

 

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

小紅書メモを削除する方法 小紅書メモを削除する方法 Mar 21, 2024 pm 08:12 PM

小紅書メモを削除するにはどうすればよいですか? メモは小紅書アプリで編集できます。ほとんどのユーザーは小紅書メモの削除方法を知りません。次に、エディターがユーザーに小紅書メモの削除方法に関する写真とテキストを提供します。チュートリアル、興味のあるユーザーが来て、それを受講してください見てください!小紅書使い方チュートリアル 小紅書メモの削除方法 1. まず小紅書アプリを開いてメインページに入り、右下隅の[自分]を選択して特別エリアに入ります; 2. 次に、マイエリアで、表示されているメモページをクリックします下の図で、削除したいメモを選択します; 3. メモページに入り、右上隅の [3 つの点] をクリックします; 4. 最後に、下部に機能バーが展開され、[削除] をクリックして完了します。

小紅書に関する削除されたメモは復元できますか? 小紅書に関する削除されたメモは復元できますか? Oct 31, 2023 pm 05:36 PM

小紅書から削除されたメモは復元できません。小紅書は知識共有とショッピングのプラットフォームとして、ユーザーにメモを記録し、役立つ情報を収集する機能を提供します。小紅書氏の公式声明によると、削除されたメモは復元できないとのこと。小紅書プラットフォームには、専用のノート回復機能はありません。これは、Xiaohongshu でメモが削除されると、誤って削除されたか、その他の理由であったとしても、プラットフォームから削除されたコンテンツを取得することは通常不可能であることを意味します。特別な状況が発生した場合は、Xiaohongshu のカスタマー サービス チームに連絡して、問題の解決に協力できるかどうかを確認してください。

最新のiOS 17システムでiPhoneにApple Notesを接続する方法 最新のiOS 17システムでiPhoneにApple Notesを接続する方法 Sep 22, 2023 pm 05:01 PM

リンクの追加機能を使用して iPhone で AppleNotes をリンクします。注: iOS17 がインストールされている場合、iPhone 上で Apple Notes 間のリンクを作成することができます。 iPhone でメモ アプリを開きます。次に、リンクを追加するメモを開きます。新しいメモを作成することもできます。画面上の任意の場所をクリックします。メニューが表示されます。右側の矢印をクリックして、「リンクの追加」オプションを表示します。クリックして。ここで、メモの名前または Web ページの URL を入力できます。次に、右上隅の「完了」をクリックすると、追加されたリンクがメモに表示されます。単語にリンクを追加したい場合は、単語をダブルクリックして選択し、「リンクを追加」を選択して、 を押します。

小紅書に投稿したメモが見つからない場合はどうすればよいですか?送信したばかりのメモが見つからない理由は何ですか? 小紅書に投稿したメモが見つからない場合はどうすればよいですか?送信したばかりのメモが見つからない理由は何ですか? Mar 21, 2024 pm 09:30 PM

小紅書のユーザーとして、私たちは皆、公開されたノートが突然消えてしまう状況に遭遇したことがありますが、間違いなく混乱し、心配しています。この場合、どうすればよいでしょうか?この記事では、「小紅書が公開したメモが見つからない場合の対処方法」というテーマに焦点を当て、詳細な回答を提供します。 1. 小紅書が発行したメモが紛失した場合はどうすればよいですか?まず、パニックにならないでください。メモがなくなっていることに気づいた場合は、パニックに陥らず、落ち着いて行動することが重要です。これは、プラットフォームのシステム障害または操作エラーが原因である可能性があります。リリース記録の確認も簡単です。小紅書アプリを開き、「自分」→「公開」→「すべての出版物」をクリックするだけで、自分の出版記録を表示できます。ここでは、以前に公開されたノートを簡単に見つけることができます。 3.再投稿。見つかったら

小紅書でノートに商品リンクを追加する方法 小紅書でノートに商品リンクを追加するチュートリアル 小紅書でノートに商品リンクを追加する方法 小紅書でノートに商品リンクを追加するチュートリアル Mar 12, 2024 am 10:40 AM

小紅書でメモに商品リンクを追加するにはどうすればよいですか?小紅書アプリでは、ユーザーはさまざまなコンテンツを閲覧できるだけでなく、ショッピングもできるため、このアプリにはショッピングのおすすめや良い商品の共有に関するコンテンツがたくさんあります。このアプリでは、ショッピング体験を共有したり、協力してくれる販売者を見つけたり、メモにリンクを追加したりすることもできます。便利なだけでなく、専門家がいくつかの機能を備えているため、多くの人がこのアプリをショッピングに使用したいと考えています。興味深いコンテンツを閲覧して、自分に合った衣料品があるかどうかを確認できます。ノートに商品リンクを追加する方法を見てみましょう! 小紅書ノートに商品リンクを追加する方法 携帯電話のデスクトップでアプリを開きます。アプリのホームページをクリックします

イマーシブ リーダーで Microsoft Reader Coach を使用する方法 イマーシブ リーダーで Microsoft Reader Coach を使用する方法 Mar 09, 2024 am 09:34 AM

この記事では、Windows PC のイマーシブ リーダーで Microsoft Reading Coach を使用する方法を説明します。読書指導機能は、生徒や個人が読書を練習し、読み書き能力を伸ばすのに役立ちます。サポートされているアプリケーションで文章や文書を読むことから始めます。これに基づいて、Reading Coach ツールによって読書レポートが生成されます。読書レポートには、読書の正確さ、読むのにかかった時間、1分あたりの正解単語数、読書中に最も難しいと感じた単語が表示されます。単語を練習することもできるので、一般的な読解力の向上にも役立ちます。現在、Office または Microsoft365 (OneNote for Web および Word for We を含む) のみ

小紅書でメモのチュートリアルを公開するにはどうすればよいですか?メモを投稿することでユーザーをブロックできますか? 小紅書でメモのチュートリアルを公開するにはどうすればよいですか?メモを投稿することでユーザーをブロックできますか? Mar 25, 2024 pm 03:20 PM

小紅書はライフスタイル共有プラットフォームとして、食、旅行、美容などさまざまな分野のメモをカバーしています。多くのユーザーは小紅書でメモを共有したいと思っていますが、その方法がわかりません。この記事では、Xiaohongshu にメモを投稿するプロセスを詳しく説明し、プラットフォーム上で特定のユーザーをブロックする方法を検討します。 1.小紅書でメモのチュートリアルを公開するにはどうすればよいですか? 1. 登録とログイン: まず、携帯電話に小紅書アプリをダウンロードし、登録とログインを完了する必要があります。パーソナルセンターに個人情報を記入することは非常に重要です。アバターをアップロードし、ニックネームや自己紹介を記入することで、他のユーザーがあなたの情報を理解しやすくなり、メモに注意を向けやすくなります。 3. 公開チャネルを選択します。ホームページの下部にある [メモを送信] ボタンをクリックし、公開するチャネルを選択します。

iPhone のメモ アプリで印刷したメモや手書きのメモをスキャンします iPhone のメモ アプリで印刷したメモや手書きのメモをスキャンします Nov 29, 2023 pm 11:19 PM

2022 年、Apple は iPhone および iPad のメモ アプリに、印刷または手書きのテキストをすばやくスキャンしてデジタル テキスト形式で保存できる新機能を追加しました。それがどのように機能するかを学び続けてください。 iOS および iPadOS の以前のバージョンでは、Apple のメモ アプリにテキストをスキャンするには、メモのテキスト フィールドをタップしてから、ポップアップ メニューの [ライブ テキスト] オプションをタップする必要がありました。ただし、Apple は 2022 年に現実世界のメモのデジタル化を容易にします。次の手順では、iOS 15.4 または iPadOS 15.4 以降を実行しているデバイスでこれを行う方法を示します。 iPhone または iPad で、「」を開きます。

See all articles