diff --git a/src/pages/tips/object-oriented.mdx b/src/pages/tips/object-oriented.mdx index 9c7316a..30de5a0 100644 --- a/src/pages/tips/object-oriented.mdx +++ b/src/pages/tips/object-oriented.mdx @@ -309,7 +309,84 @@ ### 特別なメソッド -TODO: constructor +クラスの中で、特別な意味を持つメソッドが存在します。 +この中では、**constructor (コンストラクタ)** と呼ばれるメソッドが特に重要です。 + +[クラスの使い方](#クラスの使い方) の章で、クラスをインスタンス化するためには、`new クラス名()` という構文を使う必要があると説明しました。 +その書き方は、クラス名の後ろに、括弧 `()` をつける形になっています。 + +まるで関数を呼び出すような書き方になっていますが、これがコンストラクタと呼ばれる特別なメソッドの呼び出しになっています。 + +具体的に見てみましょう。 + +```php + newされました +``` + +このコンストラクタには、引数を定義することもできます。 +その多くの場合、インスタンスを作るときにプロパティの初期値を設定するために使われます。 + +```php +name = $name; + } +} + +// 引数が指定されていないので、エラーになる +// $user = new User(); + +$user = new User("Alice"); // nameプロパティに"Alice"が入ったインスタンスが代入される +echo $user->name . PHP_EOL; +// => Alice +``` + +
+ +なお、このコンストラクタは言語によって書き方が異なります。 + +
+ +```java title=Java +class User { + public String name; + + // クラス名がそのままコンストラクタの名前になる + public User() { + System.out.println("newされました"); + } +} +``` + +
+ +```python title=Python +class User: + # コンストラクタは __init__ という名前になる + def __init__(self): + print("newされました") +``` + +
+ +
### 敢えてアクセス制限をかける (アクセス修飾子)