見出し画像

朝活63日目 サーフィンとパーフェクトPHP

今日はお休みもらっていたので朝からサーフィンへ!
タイミングよく波のサイズも上がっていたので、そこそこ楽しめました!
なかなか技が上達しないのもですが、今日はバックサイドが全くうまくいかず、いい波でコケまくってしまい、軽く凹んで終わり。。。
串間はまだまだ暑いので、ハイビスカスも元気に咲いていた!

4時おきでサーフィン行ってきたので、お昼寝して、今からパーフェクトPHPやっていきますー

この本読んで本当に良かった。
昨日の朝活の後も続きが気になって昼休みもどんどん読んでいたら、昼の業務の中で思いっきり読んだところが出てきて、もし読んでなかったら何書いてるか理解できなかった。。。

というわけで本日は第4章から〜

第4章 制御構造と関数

  • 可変関数について

    • 最初「?」ってなったけど可変関数って名前と説明何度か読んでやっと理解できた。

  • call_user_func()とcall_user_func_arry()について

  • &$hogeで参照渡し

    • 参照渡しで関数を使う場合は、直接値をしているつことができない

    • hoge(2)みたいなのはだめ

第4章おわり

今までJS、Python、Rubyと渡り歩いてきましたが、大体似たような感じ。細かい違いはあると思いますが、、、あんま覚えてないw
PHP独特の書き方みたいなのもあったので、それは頭の片隅に入れておきたい。

第5章 クラスとオブジェクト

これもよく聞くお題。

  • newしてインスタンス化、ここまではいい。「->」アロー演算子でメソッドを呼び出す。

    • このアロー演算子が最初何やってるのかわからなくて、最悪の初対面だったことを今でも覚えてる。

  • =で参照渡し、cloneで複製。お互いに影響しない。

  • アクセス修飾子

  • $thisの使い方

    • この子はJSの考え方と似ていたのでなんとなく気付いてた!

  • selfについて

なんかピンと来なかったのでChatGPT先生
PHPにおいて、$thisとselfの使い分けを教えて、どっちも同じに感じる

ChatGPT

PHPにおいて、$thisselfはどちらもクラス内で使用されるキーワードですが、異なる用途とスコープで使われます。以下にそれぞれの使い分けを説明します。

  1. $this:

    • $thisはクラスのインスタンス内で使用されます。

    • インスタンス変数やメソッドにアクセスするために使います。

    • 例えば、クラス内でプロパティやメソッドにアクセスする場合、$this->property$this->method()のように使用します。

phpCopy code

class MyClass { public $property; public function __construct($value) { $this->property = $value; } public function printProperty() { echo $this->property; } } $obj = new MyClass("Hello, World!"); $obj->printProperty(); // "Hello, World!"

  1. self:

    • selfはクラス自体を指し示します。

    • インスタンス変数ではなく、クラスのスコープ内で静的プロパティや静的メソッドにアクセスするために使用します。

    • 静的メソッド内でのみ使うことができます。

phpCopy code

class MyClass { public static $staticProperty = "Static Property"; public static function printStaticProperty() { echo self::$staticProperty; } } MyClass::printStaticProperty(); // "Static Property"

要するに、$thisはインスタンスのプロパティやメソッドにアクセスするためのもので、selfはクラス自体の静的なプロパティや静的なメソッドにアクセスするためのものです。同じに感じる場合もあるかもしれませんが、それぞれ異なる役割を果たすキーワードです。

  • 理解した。多分

  • クラス定数について

    • こいつもちょこちょこみたことある。

    • また会おう!

  • おぉー、多重継承はできないのねー、extends

  • parent::__constructでおやのが呼べる

  • オーバーライドが便利なのはわかるけど危なそうなので聞いてみた

  • クラスの継承で、オーバーライドを許容する理由って何?
    ChatGPT
    クラスの継承においてオーバーライド(Override)を許容する理由は、以下の点が挙げられます:

    1. 多様な派生クラスのサポート: クラスの継承は、既存のクラスを拡張して新しいクラスを作成するための仕組みです。この際、新しいクラスは元のクラスの一部の振る舞いを継承しつつ、独自の機能を追加または変更できます。オーバーライドを許容することで、多様な派生クラスをサポートし、それぞれのクラスが必要な動作を実現できます。

    2. 拡張性と柔軟性: オーバーライドにより、派生クラスは基底クラスのメソッドをカスタマイズできます。これにより、基底クラスの振る舞いを変更せずに、特定の派生クラスに合わせたカスタム処理を追加できます。これはプログラムの拡張性と柔軟性を高めます。

    3. ポリモーフィズムの実現: オーバーライドは、ポリモーフィズムの基盤となります。ポリモーフィズムは、同じメソッド名を持つが異なるクラスで異なる振る舞いをすることを意味し、実行時に適切なメソッドが呼び出されます。これにより、共通のインタフェースを持つ異なるオブジェクトに対して統一的な方法でアクセスできます。

    4. 既存のコードの再利用: クラスの継承を通じて、既存のクラスを再利用できます。オーバーライドを許容することで、新しいクラスが親クラスのメソッドを再利用しつつ、必要な変更を加えることができます。これにより、コードの重複を減少させ、保守性を向上させます。

継承とオーバーライドは、ソフトウェア設計の中で重要な概念であり、柔軟で効率的なプログラムの開発に寄与します。ただし、オーバーライドを適切に使用するためには、適切な設計とドキュメンテーションが必要です。

朝活?夕活?終わり

大体読むと他の言語と大体一緒だなーって思いながらも、クラスについて説明して!って言われるとあやふやなところもあるので、復習がてらしっかり読んでいく!
今日の晩御飯はBBQの予定なので、火おこしに行きます!
結局昼寝しすぎて洗車はまた今度!

この記事が気に入ったらサポートをしてみませんか?