オブジェクト指向について話すとき、まずこれまでのプログラミングのアイデアを復習しましょう。いわゆるプログラミングのアイデアは、知識の本質的な原則に基づいてプログラムについて論理的に推論するプロセスです。プログラミングのアイデアの重点は、まず何をするかを明確にすることです。行われることです。コードを残すときは、これを行う方法を理解できなければなりません。コードを再度暗記する代わりに。やりたいことに応じて、既知のさまざまな条件を確認し、条件がない場合は自分で条件を作成する必要があります。つまり、条件を知り、結果を知り、過程を求める。 実際のプログラムでは、満足のいく条件を作成するために多くの準備作業を行う必要があることがよくあります。たとえば、MySQL でデータを出力するには、プログラム内でデータをどこに出力するかを知るためにページング計算を準備する必要があります。 1 つの機能または 1 つのプロセスでは、機能全体のニーズを満たすことはできません。完了するには、いくつかのプロセスの協力が必要です。たとえば、Web ページを開いたときの動作、フォームの送信時の動作、フォームが送信されなかったときの動作、データベースに接続できないときの動作などです。 、接続された場合の対処方法。フォームが送信されていない場合 ($_POST が空の場合)、フォームを表示します。データが送信されると、データベースに接続し、SQL ステートメントを整理してデータベースに書き込みます。次に、ユーザーにプロンプト ページを表示します。まとめると、プログラム全体を考えると、ここでプログラムが実行されるときに何をする必要があるか、次のプロセスのニーズを満たすにはどうすればよいかを考え、これらの処理の組み合わせでのみ満たすことができます。まとめると、プロセス指向の思考モデルには、何かをいつ行うか、どのように行うか、プロセスのすべてのステップという共通の特徴があります。これはプロセス指向です。
実際、私たちがコードを書くとき、その90%以上はプロセス指向であり、オブジェクト指向は単なる考え方の名前にすぎず、私たちもオブジェクト指向の考え方を使っていることが多いですが、それを知りません。次のコードは簡単な例です:
リーリーコードの一部がプロセスに対応します
データベースを読んでいると多くの人がこう思うはずです。 //データベースに接続します //データベースをクエリします //結果を表示します
本人確認であれば。もう一つプロセスがあります。 //データベースに接続します//データベースをクエリします//ユーザー名とパスワードを比較します//結果を表示します。このコメントは実際にはアイデアを説明したもので、ある程度のレベルまでコードを書くことに慣れてくると、一行ずつ考える必要はなくなります。私たちはプロセスをほんの数行のコードとして考えることがよくありますが、コードの実際の機能は思考プロセスと一致している必要があります。
まだ上記のコードです
リーリー $file = "test.txt";この書き方は、先ほど説明した、ファイルの内容を読み取る方法とより一致しています。ここで $file について考えるときは、それをファイルとして考えます。
別の例として、グラフィックス処理プロセスは、画像を作成し、画像に書き込み、画像に線を描画し、画像を出力し、この量のリソースを画像そのものとして扱うと理解できます。
いわゆるオブジェクト指向は、思考モードの説明です。この思考モードでは、ファイルを読み取ったり、データを処理したり、ファイルに書き込んだりする、それぞれのものをエンティティとして処理することを想像します。 。画像を作成する、画像に描画する、画像に書き込む、画像を出力するなど、コードの本質から見てもさまざまな量がありますが、これを潜在意識で知っておく必要があります。考えたり説明したりするときは、こうやって一つ一つ考えていくと。それは思考に一定の困難をもたらすでしょう。そして、上記の考え方と説明方法を使用してください。この考え方はオブジェクト指向です。上記のプロセス指向の考え方に似た文は、次のとおりです。 手続き指向とは、いつ、何をするか、どのように行うかということです
オブジェクト指向とは、いつ、何を 符合度百分之百,当然前提你得知道怎么封装这样一个函数,在此由于$file是文件名 将它视为文件有点牵强,但我们可以理解为文件的路径path,所以 最好使用类去封装。 用我们日常生活的常识来理解对象的话 对象时一个个实体,那么它对应的就应该有一些特性,比如说文件名是什么,路径是多少,文件大小多少,比如说我们人 有身高体重名字性别,但是,在我们平时的制作手法里面。我们要知道一个文件大小。就必须用 filesize 函数去取得。这就像我问你身高是多少,你每次都要重新量一下。 这和我们常识中的对象,存在一定的差距,使得我们在思考描述代码的时候。代码的符合度不够。 但是类可以暂时记住这些特征值,我们称之为对象的属性,属性,一定是一个准确的值,而过程在类里面称为方法,类里面 可以声明一些特殊的变量,这些变量外部不能直接访问到,这些就是类的属性,要想访问一个类的属性和方法一样使用-> 但是不需要写$,假如我们有一个file类 有一个属性 用这种方式来访问一个对象变量的属性 怎么定义它 我们先不急 慢慢道来 ,我们先回到思路上,今天我们封装一个文件读写类 我们的代码在需要文件读写的时候我们这样思考:读取文件 处理数据 写入文件 ,这个思路正是文件型计数器的思路。 那么,我们最好的写法是 这两个函数。都是同属于文件操作的。我们把它封装成为类 调用这个类的时候。代码是这么写的。 现在回到read方法 既然他已经有属性 知道自己名字和大小了 那在这里就不用再传文件名进去了,
するかということです。オブジェクト指向の場合、その方法が 1 つ少なくなります。これは、オブジェクト指向の前提条件が、その方法を知っていない場合に常に最初にプロセス指向を学ぶ理由です。何かをする方法は知っていますが、それがどのような思考モードであるかについては話せません。実は、画像処理機能は最初から最後までオブジェクト指向の思考モデルに基づいて開発されており、その思考モデルは書き方に限定されるものではありません。さまざまな関数の実装テクニックを習得した後は、この方法で書くのがオブジェクト指向であり、その方法で書くのがプロセス指向であることがわかります。私たちはカプセル化を通じてコードを再利用する傾向があります。では、どのようにすればより合理的な梱包ができるのでしょうか?このとき、先ほども言いましたが、考え方を見てください。アイデアの説明はコードと一致している必要があります。したがって、カプセル化はランダムなカプセル化ではなくなります。カプセル化された関数とクラスを使用する場合は、「考え方」で説明したのと同じ記述形式で使用するのが最善です。 。そしてアイデアの説明。 。可能な限り一致させます。
比如,我把刚才读取文件的过程。封装成一个函数
<span function</span> read(<span $file</span><span ) {
}
</span><span //</span><span 读取文件</span>
<span $data</span> = read(<span $file</span>);
<span $file</span> = <span new</span> <span file</span><span ();
</span><span echo</span> <span $file</span>->size;
<span $data</span> = read(<span $file</span><span );
</span><span $data</span> +=1<span ;
write(</span><span $file</span>, <span $data</span>);
<span function</span> read(<span $file</span><span ) {
</span><span $fp</span> = <span fopen</span>(<span $file</span>, "r"<span );
</span><span $data</span> = <span fread</span>(<span $fp</span>, <span filesize</span>(<span $file</span><span ));
</span><span fclose</span>(<span $fp</span><span );
</span><span return</span> <span $data</span><span ;
}
</span><span function</span> write(<span $file</span>, <span $data</span><span ) {
</span><span $fp</span> = <span fopen</span>(<span $file</span>, "w"<span );
</span><span $rs</span> = <span fwrite</span>(<span $fp</span>, <span $data</span><span );
</span><span fclose</span>(<span $fp</span><span );
</span><span return</span> <span $rs</span><span ;
}</span>
<span class</span><span fileclass {
</span><span function</span> read(<span $file</span><span ) {
</span><span $fp</span> = <span fopen</span>(<span $file</span>, "r"<span );
</span><span $data</span> = <span fread</span>(<span $fp</span>, <span filesize</span>(<span $file</span><span ));
</span><span fclose</span>(<span $fp</span><span );
</span><span return</span> <span $data</span><span ;
}
</span><span function</span> write(<span $file</span>, <span $data</span><span ) {
</span><span $fp</span> = <span fopen</span>(<span $file</span>, "w"<span );
</span><span $rs</span> = <span fwrite</span>(<span $fp</span>, <span $data</span><span );
</span><span fclose</span>(<span $fp</span><span );
</span><span return</span> <span $rs</span><span ;
}
}<br /><br /></span>
<span $fc</span> = <span new</span><span fileclass();<br />//读取文件
</span><span $data</span> = <span $fc</span>->read(<span $file</span><span );
</span><span $data</span> +=1<span ;<br />//写入文件
</span><span $fc</span>->write(<span $file</span>, <span $data</span>);
<span public</span> <span function</span> __construct(<span $file</span><span ) {
</span><span $size</span> = <span filesize</span>(<span $file</span><span );
}</span>
<?<span php
</span><span class</span><span fileclass {
</span><span public</span> <span $size</span> = 0<span ;
</span><span public</span> <span $name</span> = ''<span ;
</span><span public</span> <span function</span> __construct(<span $file</span><span ) {
</span><span $size</span> = <span filesize</span>(<span $file</span><span );
</span><span $this</span>->size = <span $size</span><span ;
</span><span $this</span>->name = <span $file</span><span ;
}
</span><span function</span> read(<span $file</span><span ) {
</span><span $fp</span> = <span fopen</span>(<span $file</span>, "r"<span );
</span><span $data</span> = <span fread</span>(<span $fp</span>, <span filesize</span>(<span $file</span><span ));
</span><span fclose</span>(<span $fp</span><span );
</span><span return</span> <span $data</span><span ;
}
</span><span function</span> write(<span $file</span>, <span $data</span><span ) {
</span><span $fp</span> = <span fopen</span>(<span $file</span>, "w"<span );
</span><span $rs</span> = <span fwrite</span>(<span $fp</span>, <span $data</span><span );
</span><span fclose</span>(<span $fp</span><span );
</span><span return</span> <span $rs</span><span ;
}
}
</span><span $fc</span> = <span new</span> fileclass("test.txt"<span );
</span><span echo</span> "文件名:" . <span $fc</span>-><span name;
</span><span echo</span> "文件大小:" . <span $fc</span>-><span size;
</span>?>
<span function</span><span read() {
</span><span $fp</span> = <span fopen</span>(<span $this</span>->name, "r"<span );
</span><span $data</span> = <span fread</span>(<span $fp</span>, <span filesize</span>(<span $this</span>-><span size));
</span><span fclose</span>(<span $fp</span><span );
</span><span return</span> <span $data</span><span ;
}
</span>
<span class</span><span fileclass {
</span><span public</span> <span $size</span> = 0<span ;
</span><span public</span> <span $name</span> = ''<span ;
</span><span public</span> <span function</span><span __construct($file) {
</span><span $size</span> = <span filesize</span>(<span $file</span><span );
</span><span $this</span>->size = <span $size</span><span ;
</span><span $this</span>->name = <span $file</span><span ;
}
</span><span function</span><span read() {
</span><span $fp</span> = <span fopen</span>(<span $this</span>->name, "r"<span );
</span><span $data</span> = <span fread</span>(<span $fp</span>, <span filesize</span>(<span $this</span>->name<span ));
</span><span fclose</span>(<span $fp</span><span );
</span><span return</span> <span $data</span><span ;
}
</span><span function</span> write(<span $data</span><span ) {
</span><span $fp</span> = <span fopen</span>(<span $this</span>->name, "w"<span );
</span><span $rs</span> = <span fwrite</span>(<span $fp</span>, <span $data</span><span );
</span><span fclose</span>(<span $fp</span><span );
</span><span return</span> <span $rs</span><span ;
}
}</span>
<span $fc</span> = <span new</span> fileclass("test.txt"<span );
//读取文件
</span><span $data</span> = <span $fc</span>-><span read();
</span><span $data</span> +=1<span ;
</span><span echo</span> <span $data</span><span ;
//写入文件
</span><span $fc</span>->write(<span $data</span>);