2016-08-25 62 views
3

從我的CakePHP框架刪除插件後CakePHP中刪除插件後,以及與之相關的所有代碼行我得到了我的vendor->composer文件夾中的autoload_static.phpgetInitializer功能的錯誤:「會員有私人訪問錯誤」使用PhpStorm

public static function getInitializer(ClassLoader $loader) 
{ 
    return \Closure::bind(function() use ($loader) { 
     $loader->prefixLengthsPsr4 = ComposerStaticInit8835d383dd0f2dc92619594332e8ea7e::$prefixLengthsPsr4; 
     $loader->prefixDirsPsr4 = ComposerStaticInit8835d383dd0f2dc92619594332e8ea7e::$prefixDirsPsr4; 
     $loader->prefixesPsr0 = ComposerStaticInit8835d383dd0f2dc92619594332e8ea7e::$prefixesPsr0; 
     $loader->classMap = ComposerStaticInit8835d383dd0f2dc92619594332e8ea7e::$classMap; 

    }, null, ClassLoader::class); 
} 

所有的前綴和classMap標有下劃線且錯誤消息指出:

「會員有私人通道」

我對PHP相當陌生,所以我的問題是如何處理這個錯誤?我認爲只刪除這4行代碼是不安全的。

我已經嘗試更新作曲家和無效的緩存/在PhpStorm重新啓動。

編輯1

我當然不應該被刪除的相關舊插件的代碼行手動出作曲家的文件。

作曲家診斷: 檢查composer.json:FAIL require.cakephp /插件的安裝程序:綁定版本的限制(*)應避免 檢查平臺設置:FAIL OpenSSL庫(0.9.8y)由PHP使用不支持TLSv1.2或TLSv1.1。 如果可能,您應該將OpenSSL升級到版本1.0.1或更高版本。 檢查GIT中設置:行 檢查HTTP連接到packagist:警告:訪問packagist.org通過http其是不安全的協議。

由於該項目不算太舊,它可能是完全刪除它並從頭開始重新啓動的最簡單的方法,或者有一個簡單的解決方案嗎?

+0

你不應該在你的'vendor/composer'文件夾中擔心代碼,尤其是如果它在運行時不拋出錯誤的話。你絕對不應該手動編輯這些文件。附:您可以嘗試在終端/控制檯中運行'composer diagnose',看看作曲家是否會發現任何明顯的問題。 – LazyOne

+0

你說得對,我不應該手動觸摸這些文件。 已更新我的帖子與診斷。 我在那裏得到了一些警告,但只有第一個警告可能與我的問題有關。 –

回答

5

這些行在技術上錯誤地突出顯示爲錯誤,甚至在您修改代碼之前它們被突出顯示爲錯誤。

代碼將特定的對象和作用域綁定到閉包,在這種情況下,它將綁定$loader對象(ClassLoader的實例)與ClassLoader::class作用域。這將導致閉包綁定到$loader對象,使得私有方法對其可見,因此在運行時不會出錯。

所以問題就是這樣的PhpStorm解析器是不夠聰明(還)認識到這一點。

又見http://www.php.net/manual/en/closure.bind.php

至於你的其他作曲家的問題而言,供應商檔案應始終安全刪除,即vendor文件夾通常應該只包含通過作曲家安裝的代碼,這意味着萬一你搞砸大,你應該能夠簡單地刪除該文件夾vendor,修理你composer.json文件(並刪除composer.lock文件)如果必要的話,然後就再次運行composer updatecomposer install命令。

+0

該目錄是'vendor'而不是'vendors'。此外,我也遇到了這個問題。現在是2017年5月23日,最新的PHPStorm尚未解決此問題。 – UnixAgain