PHP が継承するもの、私の個人的な意見、PHP が継承するものについての意見について話しましょう
PHP は言語軽蔑の連鎖の最下位にあるものであるということがインターネット上でよく広まっています。私はかつて大学で Java を勉強していました。私も大学卒業後、研修のために Java を使用していましたが、最初の 2 ~ 3 年間は、PHP のオブジェクト指向の性質について常に感じていました。 JS に対する私の意見は言うまでもなく、「魚でも鳥でもない」でした。しかし、プロジェクトを重ねるごとに、こうした考えは徐々に薄れ、あるいは変化してきました。これには、プロジェクトとテクノロジーに対する理解を深めることが含まれますが、同時に、Web 環境とテクノロジーは長年にわたって常に更新されてきました。しかし、今日私はこれらのことについて話すためにここにいるわけではありません。私の視点は次のように要約できます。テクノロジーはツールであり、それが適切でない場合は、それをアップグレードするか置き換えるということです。 。
元の話題に戻ります。私は 8 年近く PHP の作成に熟練してきましたが、仕事の関係で、フロントエンドとバックエンドにさまざまなコードを関与させる必要があることが多く、分離しやすく、いつも忘れてしまいます。最近、書き留めておけば少しは目が覚めるかもしれないと思う出来事がありました。
ある年に、あるモジュールを書いたとき、静的メンバーを使っていたのですが、そのサブクラスを実装する過程で、親クラスのメンバーの値も共有していることに気づきました。具体的には、あるモジュールのメンバーの値を変更しました。サブクラス A. が別のサブクラス B によって使用されると、A によって上書きされた値が予期せず取得されました。その時思ったのですが、静的メンバは宣言箇所からカテゴリツリー全体で共有されることが分かりました。その後、この結論をうっすらと思い出し、作成したクラスが独立したツールクラスであることが確認できない限り、静的メンバーを安易に使用すべきではないと通常のコードで慎重に使用しました。
ある日、上司が私が以前に作成した BaseModel のアップグレードについて話し合うまで、彼は偶然私にこう尋ねました。「静的メンバーを使用するのが好きではないようですね?」いいえと答えたのは、BaseModel がさまざまな Model に継承されることが多いことを考慮すると、ここで static を使用すると、将来問題が発生しやすくなるからです。彼は理解できないと言って、私のところに来て議論しました。静的メンバーは共有されるため、2 つの異なるサブクラスが呼び出された場合、静的メンバーの変数の値はグローバル変数と同様に制御不能になると正しく説明しました。彼は同意しません。そこで、科学の精神に従って、検証するための短いコードを書きました:
クラスA {
protected static $var1 = null;
パブリック静的関数 test(){
get_called_class()をエコーします。 ' '.static::$var1.'
';
}
}
クラス B は A を拡張します {
protected static $var1 = 'b';
}
クラス C は A を拡張します {
protected static $var1 = 'c';
}
B::test();
C::test();
今回は当然負けました。 結果は c c と予想していましたが、実際は b c でした。 したがって、サブクラスの静的メンバーはサブクラス レベルでのみ共有されるようです。しかし、私はいつも何かが間違っていると感じます。BaseModel を作成していたときに、明らかに別の挫折がありました。なぜこの検証では、そのときに遭遇した問題がサポートされないのでしょうか。その時、私は何かを忘れていることに気づきました。若いのはなんて素晴らしいことでしょう。後で考えてみると、ここで static を使用しなかったのは、単に設計要件のためでした。
私は間違っていると思いました。数日前まで、(BaseModelではなく)さらにいくつかの親子クラスを作成し、静的メンバーを大胆に使用した結果、セルフテストで再びつまずきました。どうしたの!次に、今回は使用法に細心の注意を払い、上記の例を変更して実行しました:
クラスA {
protected static $var1 = null;
protected static $var2 = null;
パブリック静的関数 test(){
if(!static::$var2){
static::$var2 = static::$var1;
}
get_called_class()をエコーします。 ' '.static::$var1.'
';
}
}
クラス B は A を拡張します {
protected static $var1 = 'b';
}
クラス C は A を拡張します {
protected static $var1 = 'c';
}
B::test();
C::test();
結果は
B b
Cb
前回の結論が正しかったとしたら、今回はどう説明しますか?これは明らかに、$var2 が A、B、C によって共有されていることを意味します。 $var1 と $var2 の違いは、宣言されているかどうかの違いだけのようです。そこで私はこれを次のように変更しました:
クラスA {
protected static $var1 = null;
protected static $var2 = null;
パブリック静的関数 test(){
if(!static::$var2){
static::$var2 = static::$var1;
}
get_called_class()をエコーします。 ' '.static::$var1.'
';
}
}
クラス B は A を拡張します {
protected static $var1 = 'b';
protected static $var2 = null;
}
クラス C は A を拡張します {
protected static $var1 = 'c';
protected static $var2 = null;
}
B::test();
C::test();
結果は
B b
Cc
私は内心打ち砕かれました。そこで Stack Overflow に行ってみると、騙されたのは私だけではないことがわかりました。
明示的に宣言された静的メンバーのみが、サブクラスにのみ属しているとみなされます。
明示的に宣言された静的メンバーのみがサブクラスにのみ属するとみなされます。
明示的に宣言された静的メンバーのみが、サブクラスにのみ属しているとみなされます。
大事なことは3回言いましょう!ただし、サブクラスの数が多い場合、値が動的に決まる各メンバーがこのように宣言されることになり、コードを書く上で static を使う意味がなくなってしまいます。より良い方法は、$var2 を配列にして、各クラスで使用される値を $var[__CLASS__] に入れることです。
ただし、どうしても必要でない場合は、静的メンバーの継承は使わないようにしましょう。
ちょっと似たような「穴」がもう一つあります。プライベート メンバーについて話すとき、プライベートとはプライベートを意味し、サブクラスには継承されないことは誰もが知っています。しかし、コードを書いているときに忘れてしまうこともあり、書き始めるまで思い出せないことがあります。その理由は、サブクラスが持つべきメンバーを見つけられない原因であることが判明したり、サブクラスで private が宣言されていることが判明したりするためです。関数を呼び出すと、親クラス関数が呼び出され、結果はサブクラスではなく親クラスのプライベート値になります。この場合、サブクラス内の関数をそのまま書き換えることはできません。したがって、プライベートを使用する場合は十分に注意してください。
Rackspace の SDK を使用していたときに、一部のクラスでプライベート メンバーが使用されていることがわかりましたが、ファイルを開くための不要なアクセス許可を与えたため、コードはサーバー上で実行できませんでした。なのでこの時はこのメンバの初期値を上書きするサブクラスを書きたかったのですが、結局プライベートメンバなので参照先を全て自分が書いたサブクラスにコピーする必要がありました。 SDK を変更してメンバーを保護するだけではどうでしょうか?次回開発パッケージがアップグレードされるかもしれないから?修正後はサブクラスを削除するだけです。ライブラリのコードを変更することが習慣になると、アップグレードするときにあまり楽しくなくなります。したがって、プライベート メンバーは注意して使用する必要があります。SDK も開発している場合は、ユーザーが継承する必要があるかどうかを考慮する必要があります。 private を記述する必要がある場合、そのコードがさまざまなシナリオで使用できることを確認できますか?
よほどの理由がない限り、静的とプライベートの両方を注意して使用する必要があります。

PHP CMS 是一种基于 PHP 的开源内容管理系统,用于管理网站内容,其特点包括易用性、强大功能、可扩展性、安全性高和免费开源。它可以节省时间、提升网站质量、增强协作并降低开发成本,广泛应用于新闻网站、博客、企业网站、电子商务网站和社区论坛等各种网站。

phpcms跳转到详情页方法:1、使用header函数来生成跳转链接;2、循环遍历内容列表;3、获取内容的标题和详情页链接;4、生成跳转链接即可。

标题:微信登录集成指南:PHPCMS实战在今天的互联网时代,社交化登录已经成为网站必备的功能之一。微信作为国内最流行的社交平台之一,其登录功能也被越来越多的网站所采用。本文将介绍如何在PHPCMS网站中集成微信登录功能,并提供具体的代码示例。第一步:注册微信开放平台账号首先,我们需要在微信开放平台上注册一个开发者账号,申请相应的开发权限。登录[微信开放平台]

PHPCMS 是一款免费开源的内容管理系统 (CMS),特点包括:开放源码、模块化、灵活、用户友好和社区支持。它可用于创建各种类型的网站,包括企业网站、电子商务网站、博客和社区论坛。技术要求包括:PHP 5.6 或更高版本、MySQL、MariaDB 或 PostgreSQL 数据库以及 Apache 或 Nginx Web 服务器。

phpcms不是完全免费的。phpcms属于开源cms系统,但是开源并不等于免费,它有两个版本:免费版和商业版,免费版仅限于个人非商业用途,而商业版需要购买授权;个人可以作为研究使用,如果商业应用,需要支付一定费用。

phpcms用mysql数据库。phpcms是一个PHP开源网站管理系统,采用PHP+MYSQL做为技术基础进行开发。PHPCMS V9采用OOP方式进行基础运行框架搭建,支持的PHP版本是PHP5及以上、支持的MYSQL版本是MySql 4.1以上版本。

很多站长使用PHPCMS进行二次开发建站,PHP中文网特意推出了phpcms视频教程,大家可以随时随地免费观看视频教程,不需要从百度网盘下载,非常方便。

phpcms有两个版本比较知名,分别是:1、phpCMS4,支持自定义 URL 规则,网站管理后台美观易用,前端插件许多,可自由扩展功能;2、phpCMS2008R1,支持多语言、多站点管理,页面管理器便捷灵活方便,非常轻量级,运行速度快。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

WebStorm Mac版
便利なJavaScript開発ツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ホットトピック



