SegmentFault autoload的问题
2020-12-22T15:18:05+08:00
https://segmentfault.com/feeds/tag/autoload
https://creativecommons.org/licenses/by-nc-nd/4.0/
这个sdk中这个文件的使用方法是什么?
https://segmentfault.com/q/1010000038584861
2020-12-22T15:18:05+08:00
2020-12-22T15:18:05+08:00
小小的PHP能干啥
https://segmentfault.com/u/zhang_chenglin
0
<p>标题不知道咋起了,随便起了一个。<br>涉及的文件地址如下:</p><blockquote>aliyun/openapi-sdk-php/src/IdeHelper.php<p><a href="https://link.segmentfault.com/?enc=euZJZgaJM3E03WLdXyUXCQ%3D%3D.Ppi0qAy1AyP5K8uPC0jpZaw8IJa0iutC3v5FELuoFlMHOF4OJHP1TMJIHVZ0o9JBi55SV6u25oTTrc7IG24AQWMTaYDkX%2F4huxFYsL9cucw%3D" rel="nofollow">https://github.com/aliyun/ope...</a></p></blockquote><p>上面的文件中的注释中的这种写法是什么意思?<br>还有就是这个sdk的文件结构为什么这么设计,具体是指每个分类文件夹中都另外包含了composer.json文件。</p><p>我最主要为什么看源码的原因是,在自己发布composer的时候,用这种有什么优点吗。</p><p>另外:对贵公司的业务并无冒犯之意,只是看看大神们的代码。</p>
PHP composer autoload 一直报错 class not found
https://segmentfault.com/q/1010000030694111
2020-10-09T13:26:07+08:00
2020-10-09T13:26:07+08:00
util
https://segmentfault.com/u/util
-1
<p>很久没使用composer了,今天试了一下,结果autoload一直都是报错</p><pre><code class="shell">Fatal error: Uncaught Error: Class 'helper\Router' not found</code></pre><p>文件结构:</p><pre><code class="shell">Folder PATH listing for volume 新加卷
Volume serial number is 000C-8DEE
F:.
│ cmd.php
│ composer.json
├───helper
│ functions.php
│ Router.php
│
└───vendor
│ autoload.php
│
└───composer
autoload_classmap.php
autoload_files.php
autoload_namespaces.php
autoload_psr4.php
autoload_real.php
autoload_static.php
ClassLoader.php
installed.json
LICENSE</code></pre><p>文件cmd.php 源码</p><pre><code class="php"><?php
require 'vendor/autoload.php';
$r = new helperRouter();</code></pre><p>文件helper/Router.php 源码</p><pre><code class="php"><?php
namespace helper;
class Router {
}</code></pre><p>文件composer.json 源码</p><pre><code class="json">{
"name": "tool/import",
"description": "create test data for test",
"authors": [
{
"name": "author",
"email": "author@gmail.com"
}
],
"require": {},
"autoload": {
}
}</code></pre><p>执行 php cmd.php 报错提示如下:</p><pre><code class="shell">F:\test\demo003>php cmd.php
PHP Fatal error: Uncaught Error: Class 'helper\Router' not found in F:\test\demo003\cmd.php:5
Stack trace:
#0 {main}
thrown in F:\test\demo003\cmd.php on line 5
Fatal error: Uncaught Error: Class 'helper\Router' not found in F:\test\demo003\cmd.php:5
Stack trace:
#0 {main}
thrown in F:\test\demo003\cmd.php on line 5
</code></pre><p>很多年没试过composer,现在autoload 不起作用了。试过这样写composer.json</p><pre><code class="json">"autoload": {
"psr-4": {
"\\": "/"
},
"files": [
]
}</code></pre><p>更新 <code>composer dump-autoload</code> 之后,依旧是提示那个错误。</p>
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length 什么意思?
https://segmentfault.com/q/1010000006173136
2016-08-04T19:13:05+08:00
2016-08-04T19:13:05+08:00
古德爱蒂尔
https://segmentfault.com/u/gudeaidier
0
<p>对psr0 psr4不太了解<br>这是composer里面的一句,</p>
<pre><code>$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length</code></pre>
<p>请问这句有什么作用</p>
php 的 namespace 和 autoload 的问题
https://segmentfault.com/q/1010000004881707
2016-04-06T20:19:47+08:00
2016-04-06T20:19:47+08:00
LemonLone
https://segmentfault.com/u/lemonlone
0
<p>假设我的项目其中的一个目录:</p>
<pre><code>app
== site
==== controller
====== IndexController.php
====== AccessController.php
== api
==== controller
====== PostController.php
</code></pre>
<p>假设 IndexController.php 的内容:</p>
<pre><code>namespace app\site\controller;
class IndexController {
// some code
}
</code></pre>
<p>项目是单入口,包含了 function autoload($className),我的问题:</p>
<p>假设项目约定了 namespace 中的名称必须和文件夹名称一致,并且类名称也和类文件同名(不包含下划线等奇怪的字符),那这样的话,$className 其实只需要把右斜杠换成 DIRECTORY_SEPARATOR 就可以找到对应的类文件了,比如:</p>
<pre><code>$obj = new \app\site\controller\IndexController();
</code></pre>
<p>或者</p>
<pre><code>class TestClass extends \app\site\controller\IndexController {}
</code></pre>
<p>那 autoload 实际找到的就是 /app/site/controller/IndexController.php。</p>
<p>既然这样,那为什么 thinkphp 里面的 Think 类还要 $_map 呢?类似的还有 laravel 里的:</p>
<pre><code>autoload_namespaces.php
autoload_classmap.php
autoload_psr4.php
</code></pre>
<p>比如这个是 autoload_psr4.php 里的内容:</p>
<pre><code>$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'yii\\swiftmailer\\' => array($vendorDir . '/yiisoft/yii2-swiftmailer'),
'yii\\gii\\' => array($vendorDir . '/yiisoft/yii2-gii'),
'yii\\faker\\' => array($vendorDir . '/yiisoft/yii2-faker'),
'yii\\debug\\' => array($vendorDir . '/yiisoft/yii2-debug'),
'yii\\composer\\' => array($vendorDir . '/yiisoft/yii2-composer'),
'yii\\codeception\\' => array($vendorDir . '/yiisoft/yii2-codeception'),
'yii\\bootstrap\\' => array($vendorDir . '/yiisoft/yii2-bootstrap'),
'yii\\' => array($vendorDir . '/yiisoft/yii2'),
'cebe\\markdown\\' => array($vendorDir . '/cebe/markdown'),
'Faker\\' => array($vendorDir . '/fzaninotto/faker/src/Faker'),
);
</code></pre>
<p>这里面通过数组定义的映射有什么作用啊?</p>
spl_autoload_register 参数问题
https://segmentfault.com/q/1010000002510575
2015-01-25T11:01:58+08:00
2015-01-25T11:01:58+08:00
nice_body
https://segmentfault.com/u/nice_body
0
<p>我看到symfony2的Psr4ClassLoader类中有一句是:</p>
<pre><code>public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
}
</code></pre>
<p>spl_autoload_register函数的第一个参数是字符串的话,我能理解是将名为字符串的函数加到autoload栈中。但是这里是一个数组是什么意思呢?</p>
PHP类库几十个怎样才能防止类重复加载
https://segmentfault.com/q/1010000000414784
2014-02-21T04:47:30+08:00
2014-02-21T04:47:30+08:00
琳千秋
https://segmentfault.com/u/chiaki
0
<p>说是 <code>include_once</code> <code>require_once</code> 效率很低</p>
<p>然后用 <code>spl_autoload_register</code> 好像也要做很多的判断</p>
<p>有什么办法能解决呢?</p>