前回の記事を理解するには、まずこの記事を読んでください...
クラス探索~~ クラスの機能と実装を大まかに理解するのに半年かかりました。主な理由は、私が理解できる記事がないことです(私はこれまでOOのものに触れたことはありません)。
私から見ると、PHPのClassに関しては、それを表現する言語が非公式で、それが正しいかどうかは分かりません。
クラスの作成はとても簡単です:
class my_class {}
クラスとは具体的に何をするものでしょうか?多くの人はそれをブラックボックスだと言いますが、私はここではそれを独立した全体と呼んでいます。クラス名だけはわかりますが、その中身はわかりません。では、このクラスをどのように使用するのでしょうか?
まず第一に、その中に定義されたパブリック変数があるかどうかを知る必要があります - 専門用語では「プロパティ」と呼ばれます。
2 番目: その中でどのような関数が定義されているかを知る必要があります。それは専門用語で「メソッド」と呼ばれます。
専門用語に混乱したので無視しました。
クラス内でパブリック変数を定義する方法とそれが何をするのか?
非常に簡単です、my_class クラスを拡張してみましょう:
class my_class
{
var $username;
}
上記を見ると、非常に簡単です。var + スペース + 通常の変数名で構成されています。何に使われますか?関数について考えてみましょう。関数の外の変数にアクセスしたい場合、まずそれをグローバルにする必要がありますか?この効果についても同様で、このクラス内のすべての関数がこの変数にアクセスできるようになります。また、関数と異なる点の 1 つは、クラスの外部もいつでもこの変数にアクセスして制御できることです。外部へのアクセス方法については後ほど。もう 1 つの違いがあります。複雑なステートメントを使用してこの変数に値を割り当てることはできません (クラスを理解した後でルールを確認してください)。
デフォルト値を与えます:
class my_class
{
var $username = "深空";
}
OK、パブリック変数が定義され、次に関数(「メソッド」とも呼ばれます)を定義します:
class my_class
{
var $username = "深空";
function show_username()
{
}
}
この定義された関数は通常の定義と同じです機能的な形式に違いはありません。シンプルにして、$username を出力する関数を定義してください:
class my_class
{
var $username = "深空";
function show_username($username)
{
echo $username;
}
}
この時点で混乱している人もいるかもしれません (笑)、最も重要なことはここです、はっきりと見てください。 $username は 3 つになりました。どっちがどっちだよ〜〜
関数の仮引数は説明不要ですよね?この関数の機能は、仮パラメータで受け取った値を出力することです。つまり、次の場合:
show_username("猪头深空");
その後、「Pig Head Deep Space」を出力します、それはとても簡単です。
この機能にアクセスするにはどうすればよいですか?上で述べたように、これは直接の show_username("Pig Head Deep Space"); ではありません。心配しないでください。さまざまなクラスがあります。以下の通り:
$Name = new my_class();
これは上記の my_class クラスを初期化し、このオブジェクトを変数 $Name に割り当てます。このように理解できます。この変数はクラス全体を表します。
クラスで関数を使用する:
$Name->show_username("猪头深空");
混乱しています、なぜそんなに複雑ですか?矢が欲しいですか?実際、それはとても鮮やかです。クラスは変数 $Name にすでに与えられていますよね?つまり、$Name はクラスを表し、矢印はクラス内の show_username 関数を指します。それはとても単純です。つまり、この関数はこのクラスにあり、他の関数にはありません。違いを示していると理解できます (笑)。
「Pig Head Deep Sky」という 4 つの単語を印刷してみてください。なぜそんなに複雑だと思いますか?関数も使えるんじゃないでしょうか?私は、「もちろん、そんな単純なことではメリットがわかりません。拡張を続けましょう」と言いました。
もう 1 つの質問は、今述べた「パブリック変数」がなぜ役に立たないのかということです。この関数がこのパブリック変数 var $username のデフォルト値を自動的に受け取らないのはなぜですか?つまり、
$Name->show_username($username);
を使用すると、結果はどうなるでしょうか? 答えは、出力がありません。仮パラメータ $username に値を与えていないためです。
では、このパブリック変数はどうやって使うのでしょうか?このクラスを変更してみましょう:
class my_class
{
var $username = "深空";
function show_username()
{
echo $this->username;
}
}
おお、今回は仮パラメータがありませんね。 $this-> も余分にあるので、めまいがします(笑)。実際、これは授業の最大の利便性の 1 つでもあります。
$thisの役割:クラス内のパブリック変数や関数にアクセスします。
訪問?それほどプロフェッショナルですか?実際、var $username の代わりに $this->username が使用されます。 $this は、それがパブリックであり、アクセス可能であり、関数の外部のもの (他の変数や関数など) であることを示すために使用されます。
試してみましょう:
$Name->show_username();
見てください、最終的に「深宇宙」という2つの単語が印刷されました、わはは。
「深宇宙」という文字を印刷したくないのですが、「豚の頭の深宇宙」と印刷したいのですが、どうすればよいですか?それは非常に簡単で、このパブリック変数を再割り当てします。私はあなたに感銘を受けました。
$Name->username = "猪头深空";
この意味分かりますか? $Name->username は、クラス内のこのパブリック変数を表します。等号の割り当てについては説明する必要はありません。
もう一度印刷しましょう:
$Name->show_username();
哈哈,终于打印“猪头深空”了。不错吧,很方便吧,不用形参也能任意修改打印值哦~~。
不过单单打印一个名称也太没意思了,我们说点欢迎的话吧,来扩充一下这个类,创建一个名叫 Welcome 的函数:
class my_class
{
var $username = "深空";
function show_username()
{
echo $this->username;
}
function Welcome()
{
}
}
恩,实现什么功能好呢?简单点吧,就实现在名字前面有 “欢迎” 两个字好了
class my_class
{
var $username = "深空";
function show_username()
{
echo $this->username;
}
function Welcome()
{
echo "欢迎";
$this->show_username();
}
}
第二次看到 $this 了吧?和上次有点不同,$this->show_username(); 干什么用呢?指向类中的一个函数,其实它就是调用 show_username 这个函数,用 $this 来表示这个函数在类中并且和 Welcome 函数平行,而不是在其他地方(比如Welcome函数中)。
Welcome 函数实现的功能很简单,首先打印两个字"欢迎",然后接下去执行 show_username 函数,打印名字。
来试试这个函数吧:
$Name->Welcome();
看到了吧,打印出“欢迎深空”这四个字了。
可是我要打印“欢迎猪头深空”,怎么办?我服了你了,我们给公共变量 var $username 一个值吧:
$Name->username = "猪头深空";
接下去打印欢迎语:
$Name->Welcome();
嘿嘿,终于打印“欢迎猪头深空”了。
怎么样?明白了类的用法了么?好处在于能够调用类中的任意函数,只要用 $this 指出来,可以改变一个公共变量的值,可以在类中的函数中使用这个公共变量。………多了去了,它的应用等待你去发现了。
http://www.bkjia.com/PHPjc/508512.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/508512.htmlTechArticle要看懂前一篇,先把這篇看看先...... 对类的摸索~~俺用了半年时间才大概理解类的作用和实现。主要是没有一篇能让我理解的文章(之前...