問題タブ [php-7.1]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 戻り型宣言で NULL を返す
PHP7 で使用するコードベースをリファクタリングしていて、特にスカラー型ヒントと戻り型ヒントを実装していたときに、問題が発生しました。
いくつかのプロパティを持つクラスがあり、そのうちの 1 つが ID です。この ID は必須ではありません (ID を設定せずにオブジェクトを作成できます)。このクラスの新しいオブジェクトを作成するときは、ID を設定しません。(別のマッパー クラスによって) データベースに挿入されるとすぐに ID を取得します。
このマッパー クラスは、オブジェクトがデータベースに既に存在するかどうかを確認する必要があり、id が設定されているかどうかを確認することでこれを行います。
コードベースのすべての関数に戻り値のヒントを適用していましたが、 intの戻り値の型を強制すると、関数がNULLgetId()
を返せないという問題がありました。厳密な型指定を有効にしなくても、TypeErrors が発生します。
致命的なエラー: キャッチされていない TypeError: ExampleClass::getId() の戻り値は整数型である必要があり、null が返されます
このゲッターに戻り値のヒントを設定しないことを検討しましたが、問題はおそらく戻り値のヒントではなく、混合した戻り値の型を使用しているという事実に気付きました。戻り値の型を混在させることは悪いことだとどこかで読んだことを覚えていますが、戻り値の型を混在させずにこれに取り組む方法がわかりません。私はできた:
- ゲッターで例外をスローし、その例外をキャッチするようにマッパー クラスでチェックを設計します。
- TypeError 例外をキャッチし、それを使用して ID が設定されていないことを示します。
- id プロパティを public にして、 issetを直接呼び出せるようにします。
- 別のメソッドを追加
hasId() return isset($this->id)
率直に言って、これらの解決策はどれもあまり好きではなく、より良い選択肢があるかどうか疑問に思っていました. このような場合のベストプラクティスは何ですか?
また、厳密な入力が有効になっている場合にのみ TypeError を取得するべきではありませんか? PHP7のデフォルトは「弱い型ヒント」だと思いました。
php - PHP 7 での Interbase への複数接続のバグ
PHP 7 では、Interbase モジュールの操作方法が少し変更されたようです。
PHP 5.6 の同じコードは問題なく動作します。
Interbase/Firebird データベースへの 1 つの開いているリンクがあり、同じデータベースへの別のリンクを開くと、最初のリンクは閉じられます。
コードの一例は次のとおりです。
DB_xxx は、データベースのユーザー、パスワードなどで定義された変数です。
ibase_pconnectの代わりにibase_connectと書いても結果は同じです。
そのコードを実行しても何も得られず、ページ ログに次のようなものが表示されます。
$conx2 の行を削除すると、すべてが完全に機能します。
私のphp.iniにはこれがあります(PHP 5.6とまったく同じです):
php7 の Interbase モジュールには、この問題を引き起こしている新しいオプションがありますか?
php-7.1 - PHP 無効関数
PHP 7.1 では、void 関数型が導入されます。
https://wiki.php.net/rfc/void_return_type
return;
関数が単純に精度なしではなく「void」型であることを明示的に指定すると、どのような場合に役立ちますか?
php - PHP 7.1 での暗黙の void リターン?
ここで新しい仕様を見つけました: https://wiki.php.net/rfc/void_return_type
質問: 舞台裏で何が起こっているか知っていますか。lacks_return
関数は実際に戻りvoid
ますか?
laravel - Laravel 開発のために MacOS 12 に php 7.1 の mcrypt 拡張機能をインストールするにはどうすればよいですか?
これは私を夢中にさせており、すべてのオンラインチュートリアルに従うことは役に立ちません.
MacOS Sierra (10.12.1) を実行する新しい Mac にアップグレードしたばかりで、開発環境を構成しようとしています。ただし、プロジェクトで composer update または composer install を実行するたびに、次のメッセージが表示されます。
brew install mcrypt を実行しましたが、既にインストールされています。
システムはphp 7.1を実行しているので、brew install php71-mcryptも実行しました
extension=mcrypt.so は、私のマシンと vagrant マシンの両方で php.ini ファイルに含まれています。
私はこれに2日間参加しているので、どんな助けも大歓迎です!
php - 整形式でない数値が検出されました - 再現できません
再現できないエラーが発生します。
次のコードは、攻撃から保護するモジュールの一部です。この特定のスニペットは、特定のボット ユーザー エージェントからのヒット数を追跡しています。
何年も問題なく使用した後、突然エラーが発生しました。
不適切な数値が検出されました。
これは次の行で発生しています。
$time の値は2016-10-02 19:33:42
関数 safefilename() は以下を返します。
Mozilla-5-0-compatible-spbot-5-0-3-http-OpenLinkProfiler-org-bot
読み書きされるファイルの名前は次のとおりです。
bot_2016-10-02--19-33-42_Mozilla-5-0-compatible-spbot-5-0-3-http-Open_104.131.179.5.log
方法論
以下のコードは、ボットを対象とし、ユーザー エージェントとファイルが作成された時刻に基づくファイル名に書き込みます。そのユーザー エージェントが使用されるたびに、ファイルに "X" が追加されるので、そのエージェントが何回アクセスしたかを追跡できます。ボットが一定回数以上私を狙っている場合は、ブロックします。
以下のコードは、テストと本番環境で望ましい結果を生成します - もちろん、このエラーがスローされた場合を除きます。上記のファイルには 6 バイトが書き込まれているため、これまでに 5 回正常に読み書きされています。
PHP エラーは 06:37:04 に記録され、サーバー ログ ファイルには次のヒットが表示されます。
104.131.63.140 - - [10/Dec/2016:06:36:59 -0800] "GET /robots.txt HTTP/1.1" 301 257 "-" "Mozilla/5.0 (compatible; spbot/5.0.3; +http://OpenLinkProfiler.org/bot )"
104.131.63.140 - - [10/Dec/2016:06:36:59 -0800] "GET /robots.txt HTTP/1.1" 200 1460 "-" "Mozilla/5.0 (compatible; spbot/5.0.3; +http://OpenLinkProfiler.org/bot )"
104.131.63.140 - - [10/Dec/2016:06:37:04 -0800] "GET / HTTP/1.1" 403 937 "-" "Mozilla/5.0 (compatible; spbot/5.0.3; +http://OpenLinkProfiler.org/bot )"
104.131.63.140 - - [10/Dec/2016:06:37:05 -0800] "GET / HTTP/1.1" 301 247 "-" "Mozilla/5.0 (compatible; spbot/5.0.3; +http://OpenLinkProfiler.org/bot )"
PHP コード スタンドアロンで実行してテストできる次のコードを抽出しました。