パブリック、プライベート、保護の違いは何ですか?


989

いつ、なぜ、私が使用する必要がありpublicprivateおよびprotectedクラス内の関数や変数?それらの違いは何ですか?

例:

// Public
public $variable;
public function doSomething() {
  // ...
}

// Private
private $variable;
private function doSomething() {
  // ...
}

// Protected
protected $variable;
protected function doSomething() {
  // ...
}

59
この質問は、各キーワードの機能を文字どおりに定義するのではなく、実際の使用例を含む回答からもメリットを得られると思います。
マシュー

70
この質問は公開されるべきであり、保護されるべきではないと本当に思っています。
dotancohen

回答:


1261

あなたが使う:

  • public プロパティ/メソッドをどこからでも、他のクラスやオブジェクトのインスタンスから利用できるようにするスコープ。

  • private プロパティ/メソッドを独自のクラスでのみ表示する場合のスコープ。

  • protected 親クラスを含む現在のクラスを拡張するすべてのクラスでプロパティ/メソッドを表示する場合のスコープ。

詳細:(包括的な情報について)


79
protected現在のクラスとその親クラスを拡張するすべてのクラスで変数/関数を表示する場合のスコープ。
Shahid

4
@Shahid-私はあなたのポイントを理解していません。クラスAを拡張するクラスは、Aの親クラスも拡張します。
JDelage 2012

4
@JDelage-リンクを参照してくださいhttp://www.php.net/manual/en/language.oop5.visibility.php#109324
シャヒド

4
@Growlerでは、なぜオブジェクトを使用するのが面倒なのでしょうか。
J.Steve、2014年

27
@Growler、より役立つ答えは、オブジェクトの内部の動作をできるだけ隠すことが良いことです。そうすれば壊れる可能性が低くなります。すべてを公開すると、別のプログラマーが、オブジェクトの内部動作以外で変更したくない変数を変更する可能性があります。
キプロスでリラックス14年

1176

dd

公衆:

メソッド(関数)またはプロパティ(変数)をとして宣言するとpublic、これらのメソッドとプロパティには次のようにアクセスできます。

  • それを宣言したのと同じクラス。
  • 上記の宣言されたクラスを継承するクラス。
  • このクラスの外部にあるすべての外部要素もそれらにアクセスできます。

例:

<?php

class GrandPa
{
    public $name='Mark Henry';  // A public variable
}

class Daddy extends GrandPa // Inherited class
{
    function displayGrandPaName()
    {
        return $this->name; // The public variable will be available to the inherited class
    }

}

// Inherited class Daddy wants to know Grandpas Name
$daddy = new Daddy;
echo $daddy->displayGrandPaName(); // Prints 'Mark Henry'

// Public variables can also be accessed outside of the class!
$outsiderWantstoKnowGrandpasName = new GrandPa;
echo $outsiderWantstoKnowGrandpasName->name; // Prints 'Mark Henry'

保護されています:

メソッド(関数)またはプロパティ(変数)をとして宣言するとprotected、これらのメソッドとプロパティには次のようにアクセスできます。

  • それを宣言したのと同じクラス。
  • 上記の宣言されたクラスを継承するクラス。

外部のメンバーはこれらの変数にアクセスできません。宣言されたクラス自体のオブジェクトインスタンスではないという意味での「部外者」

例:

<?php

class GrandPa
{
    protected $name = 'Mark Henry';
}

class Daddy extends GrandPa
{
    function displayGrandPaName()
    {
        return $this->name;
    }

}

$daddy = new Daddy;
echo $daddy->displayGrandPaName(); // Prints 'Mark Henry'

$outsiderWantstoKnowGrandpasName = new GrandPa;
echo $outsiderWantstoKnowGrandpasName->name; // Results in a Fatal Error

正確なエラーは次のとおりです。

PHPの致命的なエラー:保護されたプロパティGrandPa :: $ nameにアクセスできません


民間:

メソッド(関数)またはプロパティ(変数)をとして宣言するとprivate、これらのメソッドとプロパティには次のようにアクセスできます。

  • それを宣言したのと同じクラス。

外部のメンバーはこれらの変数にアクセスできません。部外者は、宣言されたクラス自体のオブジェクトインスタンスではなく、宣言されたクラスを継承するクラスでさえないという意味で

例:

<?php

class GrandPa
{
    private $name = 'Mark Henry';
}

class Daddy extends GrandPa
{
    function displayGrandPaName()
    {
        return $this->name;
    }

}

$daddy = new Daddy;
echo $daddy->displayGrandPaName(); // Results in a Notice 

$outsiderWantstoKnowGrandpasName = new GrandPa;
echo $outsiderWantstoKnowGrandpasName->name; // Results in a Fatal Error

正確なエラーメッセージは次のとおりです。

通知:未定義のプロパティ:Daddy :: $ name
致命的なエラー:プライベートプロパティGrandPa :: $ nameにアクセスできません


リフレクションを使用したおじいちゃんクラスの解剖

この主題は実際には範囲外ではありません。ここで、反射が本当に強力であることを証明するためだけに追加します。上記の3つの例で述べたようにprotectedprivateメンバー(プロパティとメソッド)はクラスの外部からはアクセスできません。

ただし、リフレクションを使用すると、クラス外のメンバーやメンバーにアクセスするだけで、並外れたことを実行できます。protectedprivate

さて、反射とは何ですか?

リフレクションは、クラス、インターフェイス、関数、メソッド、拡張機能をリバースエンジニアリングする機能を追加します。さらに、関数、クラス、メソッドのドキュメントコメントを取得する方法を提供します。

前文

という名前のクラスがあり、Grandpas3つのプロパティがあるとします。簡単に理解できるように、名前の付いた3人のおじいちゃんがいると考えてください。

  • マーク・ヘンリー
  • ジョン・クラッシュ
  • ウィル・ジョーンズ

私たちは(アサイン修飾子)、それらを作ってみましょうpublicprotectedprivateそれぞれ。あなたは非常によく知っていることprotectedと、privateメンバーは、クラスの外にアクセスすることはできません。ここで、リフレクションを使用してステートメントと矛盾します。

コード

<?php

class GrandPas   // The Grandfather's class
{
    public     $name1 = 'Mark Henry';  // This grandpa is mapped to a public modifier
    protected  $name2 = 'John Clash';  // This grandpa is mapped to a protected  modifier
    private    $name3 = 'Will Jones';  // This grandpa is mapped to a private modifier
}


# Scenario 1: without reflection
$granpaWithoutReflection = new GrandPas;

# Normal looping to print all the members of this class
echo "#Scenario 1: Without reflection<br>";
echo "Printing members the usual way.. (without reflection)<br>";
foreach($granpaWithoutReflection as $k=>$v)
{
    echo "The name of grandpa is $v and he resides in the variable $k<br>";
}

echo "<br>";

#Scenario 2: Using reflection

$granpa = new ReflectionClass('GrandPas'); // Pass the Grandpas class as the input for the Reflection class
$granpaNames=$granpa->getDefaultProperties(); // Gets all the properties of the Grandpas class (Even though it is a protected or private)


echo "#Scenario 2: With reflection<br>";
echo "Printing members the 'reflect' way..<br>";

foreach($granpaNames as $k=>$v)
{
    echo "The name of grandpa is $v and he resides in the variable $k<br>";
}

出力:

#Scenario 1: Without reflection
Printing members the usual way.. (Without reflection)
The name of grandpa is Mark Henry and he resides in the variable name1

#Scenario 2: With reflection
Printing members the 'reflect' way..
The name of grandpa is Mark Henry and he resides in the variable name1
The name of grandpa is John Clash and he resides in the variable name2
The name of grandpa is Will Jones and he resides in the variable name3

一般的な誤解:

以下の例と混同しないでください。ご覧のとおり、privateおよびprotectedメンバーは、リフレクションを使用しないとクラスの外部にアクセスできません

<?php

class GrandPas   // The Grandfather's class
{
    public     $name1 = 'Mark Henry';  // This grandpa is mapped to a public modifier
    protected  $name2 = 'John Clash';  // This grandpa is mapped to a protected modifier
    private    $name3 = 'Will Jones';  // This grandpa is mapped to a private modifier
}

$granpaWithoutReflections = new GrandPas;
print_r($granpaWithoutReflections);

出力:

GrandPas Object
(
    [name1] => Mark Henry
    [name2:protected] => John Clash
    [name3:GrandPas:private] => Will Jones
)

デバッグ機能

print_rvar_exportvar_dumpされているデバッガ機能。それらは、人間が読める形式で変数に関する情報を示します。これらの3つの関数は、PHP 5のオブジェクトのprotectedおよびprivateプロパティを明らかにします。静的クラスメンバーは表示されません。


その他のリソース:



遅くなりましたことをお詫び申し上げます。なぜ誰かがこれらを使用するのか教えていただけますか?あなたはそれらがどのように機能するかなどを完全に説明しました。私はこれらのそれぞれの使用の利点を知りたいだけです。ありがとう
JamesG 2017年

@JamesGは、上記の他のコメントで少し説明されています。stackoverflow.com/questions/4361553/...
cjmling

抽象的で、最終的なこのキーワードが唯一のPHPクラスのために使用することができますが、それはまだアクセス修飾子:PHPで別の2つのアクセス修飾子があることを多分それはこの質問の少し外だ、なぜ私は知らないが、誰も言及していない
bxN5

1
Dhairya Lakheraによって提供された抽象化に関する説明をここで読むことをお勧めします:stackoverflow.com/questions/2558559/…。シャンカールダモダランの説明への完全な追加です。
フリオマルキ2017年

83

データのカプセル化と適切なインターフェース設計を促進するため、通常は必要な最低限の可視性をデフォルトにすることをお勧めします。メンバー変数とメソッドの可視性を検討するときは、メンバーが他のオブジェクトとの相互作用で果たす役割について考えます。

「実装ではなくインターフェースにコーディングする」場合、通常、可視性の決定を行うのは非常に簡単です。一般に、公開する正当な理由がない限り、変数はプライベートまたは保護されている必要があります。代わりに、パブリックアクセサー(ゲッター/セッター)を使用して、クラスの内部へのアクセスを制限および規制します。

車を類推として使用するには、速度、ギア、方向などがプライベートインスタンス変数になります。あなたはドライバーに空燃比のようなものを直接操作してほしくない。代わりに、限られた数のアクションをパブリックメソッドとして公開します。車へのインターフェイスは、次のような方法が挙げられるかもしれませんaccelerate()deccelerate()/ brake()setGear()turnLeft()turnRight()、など

ドライバーはこれらのアクションが車の内部にどのように実装されているかを知りませんし、気にする必要もありません。また、機能がドライバーや路上の他の人々にとって危険である可能性があることを明らかにします。したがって、パブリックインターフェイスを設計し、そのインターフェイスの背後にあるデータをカプセル化することをお勧めします。

このアプローチでは、クライアントコードとのインターフェイスのコントラクトを壊すことなく、クラスのパブリックメソッドの実装を変更および改善することもできます。たとえば、accelerate()メソッドを改善してより燃料効率を高めることができますが、そのメソッドの使用法は同じままです。クライアントコードを変更する必要はありませんが、それでも効率向上のメリットを享受できます。

編集:あなたはまだオブジェクト指向の概念(どの言語の構文よりも習得するのがはるかに難しい)を学んでいるようですので、Matt ZandstraによるPHPオブジェクト、パターン、および実践のコピーを入手することを強くお勧めします。これは、構文を教えるだけでなく、OOPを効果的に使用する方法を最初に教えた本です。私は以前に構文年を学びましたが、それはOOPの「なぜ」を理解しなければ役に立たなかったです。


3
この投稿の編集で推奨されている本は本当に非常に優れています。これまでのチャンクは、非常に賢明なものでした。最初のいくつかの章では、クラス関連の質問のほとんどに回答しました。
ジョサイア2014

不必要な詳細で私の考えを締め出しせずに、私は本当にオブジェクトを理解することは許さ本は、Smalltalkの中の例のように、あること、デビッド・A・テイラーでいたA Managerのガイド:オブジェクト指向技術オブジェクトTeechnologyでビジネスエンジニアリング。どちらもわずか100ページで、それぞれ午後に読むのに十分なほど簡単です。もちろん、Gamma et alのDesign Patternsがありますが、基本的なアプローチは「変化させたいものをサブクラス化する」ことで簡単に説明できます。
Patanjali

とてもいい例えです。保護されたものとプライベートのものがありますか?
ジャニスElmeris

79

private -クラス内からのみアクセスできます

protected -クラス内および継承クラスからアクセスできます

public -クラス外のコードからもアクセスできます

これは、関数と変数に適用されます。


ここで保護された定義が正しいかどうかはわかりません。実際に選択された回答から、保護されている-継承されたクラス以降からのみアクセスでき、元の親クラスからはアクセスできません。「クラス内で」と言うのは少し混乱するかもしれません。
pal4life 2012年

7
私はそうは思いません、実際、選択された答えはここで混乱しているもののようです。Shahidsコメントを参照してください。私見の保護されたメソッドは、元のクラス内から非常によくアクセスできます。
2012年

クラスは別のクラスのパブリックにアクセスできますか?
Serjas

1
@Serjas:いいえ、静的メソッド/フィールドでない限り、別のオブジェクトのみです。
DanMan 2013

これがすべてのプログラミング言語に当てはまるかどうかはわかりませんが、PHPでは、「保護された」プロパティ/メソッドは、宣言されたクラス、またはプロパティ/メソッドを定義するクラスから継承するクラスでアクセスできます。
John Slegers、2015年

25

違いは次のとおりです。

Public ::パブリック変数またはメソッドには、クラスの任意のユーザーが直接アクセスできます。

Protected ::保護された変数またはメソッドには、クラスのユーザーはアクセスできませんが、クラスから継承するサブクラス内でアクセスできます。

Private ::プライベート変数またはメソッドには、それが定義されているクラスからのみ内部的にアクセスできます。つまり、プライベート変数またはメソッドは、クラスを拡張する子から呼び出すことはできません。


17

可視性スコープを持つ抽象例としては、 :: 理解を容易にします

プロパティまたはメソッドのこの可視性は、3つのキーワード(パブリック、保護、プライベート)のいずれかのプレフィックス宣言によって定義されます。

パブリック:プロパティまたはメソッドがパブリックとして定義されている場合、それは、オブジェクトを参照できるすべてのものからアクセスおよび操作できることを意味します。

  • 例えば 公開の可視性スコープは、誰でもアクセスできる「公開ピクニック」と考えてください。

Protected:プロパティまたはメソッドの可視性が保護されたメンバーに設定されている場合、クラス自体内で、継承されたクラスと継承したクラスによってのみアクセスできます。(継承:-クラスは別のクラスのすべてのプロパティとメソッドを持つことができます)。

  • 保護された可視性スコープは、会社のメンバーとその家族が公衆に許可されない「会社のピクニック」と考えることができます。これは、最も一般的なスコープ制限です。

Private:プロパティまたはメソッドの可視性がprivateに設定されている場合、クラスの関係に関係なく、プライベートメンバーを持つクラスだけがそれらのメソッドおよびプロパティ(クラス内で)にアクセスできます。

  • ピクニックのアナロジーでは、ピクニックでは「会社のメンバーだけが許可される会社のピクニック」と考えてください。家族も一般市民も許可されていません。

15
/**
 * Define MyClass
 */
class MyClass
{
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // We can redeclare the public and protected method, but not private
    protected $protected = 'Protected2';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj2 = new MyClass2();
echo $obj2->public; // Works
echo $obj2->private; // Undefined
echo $obj2->protected; // Fatal Error
$obj2->printHello(); // Shows Public, Protected2, Undefined

から抽出:

http://php.net/manual/en/language.oop5.visibility.php


12

⚡️ここでの範囲を思い出すための簡単な方法であるpublicprotectedprivate

PUBLIC

  • public スコープ:パブリック変数/関数は、オブジェクトと他のクラスの両方で使用できます。

PROTECTED

  • protected スコープ:保護された変数/関数は、現在のクラスを拡張するすべてのクラスで使用できます。
  • 番号!オブジェクトはこのスコープにアクセスできません

PRIVATE

  • private スコープ:プライベート変数/関数は、それが定義されている現在のクラスでのみ表示されます。
  • 番号!現在のクラスを拡張するクラスは、このスコープにアクセスできません。
  • 番号!オブジェクトはこのスコープにアクセスできません。

PHPマニュアルでメソッドまたは変数の可視性を読んでください。


9

いつ」を考慮する:
正確にわからない場合、最初はすべてをプライベートとして宣言する傾向があります。理由は、通常、プライベートメソッドをパブリックにする方が、その逆の方がはるかに簡単だからです。これは、プライベートメソッドがクラス自体の中でしか使用されていないことを少なくとも確認できるためです。publicメソッドはすでにどこでも使用されている可能性があり、おそらく広範囲にわたる再書き込みが必要です。

更新:デフォルトのprotectedカプセル化に十分であり、クラスを拡張しているときに邪魔にならないことがわかったので、私は今日のデフォルトに移動します(とにかく回避しようとします)。他の2つを使用する十分な理由がある場合のみ、使用します。

privateメソッドの正当な理由は、拡張クラスでさえ変更すべきではない、そのオブジェクトに固有の何かを実装するものです(内部状態管理のようなカプセル化に加えて、実際の理由)。結局のところ、protectedメソッドが通常使用されている場所を追跡するのはまだ十分簡単であるため、protected現在ではデフォルトになっています。100%客観的な「塹壕で」の経験ではないかもしれません。


3
更新後:「十分」と「正当な理由」がここでどのように結びつくのかをより明確にできますか?たとえば、使用privateしてもまだ十分に「十分」ですが、以前に与えた理由がまだ「十分な理由」のように聞こえるにもかかわらず、カプセル化はもはや推奨されません。
2013年

@hakre:カプセル化に努めるべき理由は、外部スコープへの状態のリークを避けるためです。protectedすでにそれができますが、拡張/継承のために柔軟に保つことができます。繰り返しますが、それを行う正当な理由がない限りprivate
DanMan 2017年

まあそれはおそらく私たちが同意しないポイントです。protected実際には外側のスコープに漏れてしまい、暗黙的に継承を優先するなどの悪い設計決定をサポートする一方で、構成を優先する方がよいため、多くの場合、あなたの邪魔になります。そのため、実際の要件がない限り、プライベートを使用する方が、コードの記述を開始するためのより良い方法になることがよくあります。これにより、実際にはまだ必要ではないが、設計の決定が早すぎることも防止できます。
2017年

十分に公平ですが、外側のスコープ(メソッド/フィールドを呼び出している/アクセスしているコード)にprotectedリークせず、内側のスコープ(拡張クラス)にのみ漏れるため、全体的なポイントについては議論しません。それはあなたにあるかもしれないほどマイナーな違いがあります。フィールドの使用状況を追跡するのは、フィールドの使用状況よりはるかに簡単です。protectedpublic
DanMan 2017年

6

PHPマニュアルは、こちらの質問をよく読んでいます

プロパティまたはメソッドの可視性は、宣言の前にキーワードpublic、protected、またはprivateを付けることで定義できます。publicと宣言されたクラスメンバーはどこからでもアクセスできます。保護されていると宣言されたメンバーは、クラス自体の中で、継承された親クラスによってのみアクセスできます。プライベートとして宣言されたメンバーは、メンバーを定義するクラスによってのみアクセスできます。


6

私にとって、これは3つのプロパティタイプを理解するための最も有用な方法です

パブリック:この変数に直接アクセスしてコード内のどこからでも変更できる場合は、これを使用します。

クラス外からの使用例:

$myObject = new MyObject()
$myObject->publicVar = 'newvalue';
$pubVar = $myObject->publicVar;

Protected:変数にアクセスして設定するときに、他のプログラマー(および自分自身)にクラス外のゲッター/セッターを強制的に使用させたい場合に使用します(ただし、一貫してクラス内のゲッターとセッターを使用する必要があります)。これは、privateすべてのクラスプロパティを設定するデフォルトの方法になる傾向があります。

どうして?将来のある時点(たぶん5分程度)で、そのプロパティに対して返される値を操作するか、取得/設定する前にそれを使って何かを実行したい場合は、どこにでもリファクタリングせずにそれを行うことができますプロジェクトで使用しました。

クラス外からの使用例:

$myObject = new MyObject()
$myObject->setProtectedVar('newvalue');
$protectedVar = $myObject->getProtectedVar();

Privateprivateプロパティはに非常に似ていますprotectedます。ただし、特徴的な違いはprivate、親クラスのゲッターまたはセッターを使用しないと、子クラスからアクセスできなくなることです。

したがって、基本的に、プロパティのゲッターとセッターを使用している場合(または、親クラスによって内部でのみ使用され、他の場所からアクセスできるようにするためのものではない場合)はprivate、誰かが試行しないようにするために、直接使用してバグ導入する

(MyObjectを拡張する)子クラス内での使用例:

$this->setPrivateVar('newvalue');
$privateVar = $this->getPrivateVar();


4

PHPの変数は、3つの異なる型にキャストされます。

パブリック:この変数タイプの値はすべてのスコープで使用でき、コードの実行時に呼び出されます。次のように宣言します。public $examTimeTable;

Private:このタイプの変数の値は、それが属するクラスでのみ使用できます。 private $classRoomComputers;

保護:このクラスの値のみで、継承またはその子クラスの形式でアクセス権が付与されている場合にのみ使用できます。通常::、親クラスによるアクセスを許可するために使用されます

protected $familyWealth;


3

古い質問を復活させますが、これを考える本当に良い方法は、あなたが定義しているAPIの観点からだと思います。

  • public -publicとマークされているものはすべて、クラス、インターフェイス、その他を使用するすべてのユーザーが使用し、依存するAPIの一部です。

  • protected-だまされてはいけません。これもAPIの一部です。人々は、サブクラス化し、コードを拡張し、保護されているとマークされたものを使用できます。

  • private-プライベートプロパティとメソッドは、好きなだけ変更できます。他のユーザーはこれらを使用できません。これらは、重大な変更を加えることなく変更できる唯一のものです。

またはSemver用語で:

  • 何かへの変更、publicまたはprotectedメジャーな変更と見なす必要があります。

  • 新しいものpublicまたはprotected(少なくとも)マイナーである必要があるもの

  • privatePATCHできるのは、何かへの新規/変更のみです。

したがって、コードの保守に関しては、作成するものに注意すること、publicまたはprotectedこれらがユーザーに約束しているものであるためです。


1

プロジェクトでオブジェクト指向のphpを使用する場合、phpでアクセス修飾子を使用するには、いくつかのルールに従う必要があります。今日は、アクセス修飾子とは何か、どのように使用できるかを明確に学習します。PHPアクセス修飾子は、クラススコープ内で定義された関数と変数であるPHPクラスとそのメンバーにアクセス権を設定するために使用されます。PHPでは、クラスメンバーに3つのスコープがあります。

  1. 公衆
  2. 民間
  3. 保護された

では、次の画像を見て、アクセス修飾子のアクセスレベルを理解しましょう。 ここに画像の説明を入力してください

ここで、アクセス修飾子として使用される可能性のあるPHPキーワードについて知るために、次のリストを見てみましょう。

public:-このアクセス修飾子で定義されたクラスまたはそのメンバーは、クラスのスコープ外からでも、どこからでもパブリックにアクセスできます。

private:-このキーワードを持つクラスメンバーは、クラス自体の中でアクセスされます。サブクラスからプライベートデータにアクセスすることはできません。メンバーをクラス外のアクセスから保護します。

protected:-サブクラスが保護されたスーパークラスメンバーにアクセスできるようにすることを除いて、privateと同じです。

今すぐアクセス修飾子を理解するために表を見てください記事全文を読むphp access modifire


1

Public:は、変数またはメソッドを宣言するときのデフォルトの状態であり、オブジェクトに直接アクセスできます。

Protected:オブジェクトとサブクラス内でのみアクセスできます。

Private:サブクラスではなく、オブジェクト内でのみ参照できます。


0

上記のキーワードはアクセス修飾子であり、カプセル化(または情報の隠蔽)の実装に役立ちます。これらは、定義されているフィールドまたはメソッドにアクセスできる他のクラスをコンパイラーに指示します。

private-現在のクラスのみがフィールドまたはメソッドにアクセスできます。

protected-このクラスの現在のクラスとサブクラス(場合によっては同じパッケージのクラスも)だけがフィールドまたはメソッドにアクセスできます。

public-どのクラスもフィールドを参照するか、メソッドを呼び出すことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.