Re: [请益] PHP Namespace use 使用问题

楼主: GALINE (天真可爱CQD)   2015-06-06 10:50:12
※ 引述《aaa7513231 (浑沌与秩序)》之铭言:
: 所以引用了一个github专案的PHP 网址:https://github.com/kachkaev/php-r
: 现在的问题点是前两行程式是引用他整个类别失败
: 出现Fatal error: Class 'Kachkaev\PHPR\RCore' not found in
: C:\wamp\www\php-r-master\src\Kachkaev\Test.php on line 11
快速解决方法
- 安装 composer https://getcomposer.org/Composer-Setup.exe
- 下这两行指令,跑完之后应该要多一个 vendor 资料夹
- cd C:\wamp\www\php-r-master\
- composer install
- Test.php 最前面加上一行
<?php
include 'C:\wamp\www\php-r-master\vendor\autoload.php';
这样应该就要会跑了,不过我手上没有 Windows 也没有 R,没办法自己验证一次...
==================================================
原理则是这样
PHP 的自动加载机制需要你写程式[1]告诉 PHP 哪个 class 放哪里
这样 PHP 才知道要帮你 require 哪个档案。
一开始你会跳“找不到 class”的错误就是这个原因
而 composer 大概会帮你做这几件事情
- 帮你写好串自动加载机制的程式
- 就是那个 vendor/autoload.php
- 自动加载的规范主要是 PSR-0 跟 PSR-4[2]
- 如果有用到其他人写的程式,半自动帮你安装
- composer install 主要是做这件事。虽然 autoload.php 也是这时候产生的
- 以这里来说其实没用到这功能
然后...“用到其他人写的程式,半自动帮你安装”这件事还有另外一层意义
例如你可以另外开一个资料夹,然后下
composer require kachkaev/php-r
把这整包东西直接安装进来,他会把程式放在 vendor/ 里面。只要你
include autoload.php 就会动
================================================================
不过....你真的照做的话会跳出一个错误讯息说
“Could not find package kachkaev/php-r at any version for
your minimum-stability (stable). Check the package spelling
or your minimum-stability”
翻成白话就是
“你要我装 kachkaev/php-r 的正式版,可是我没看到这东西的正式版的说
你是拼错字还是这东西没有正式版啊?”
所以你要修改(或在资料夹里面新增)composer.json,改成内容是
{"minimum-stability": "dev"}
告诉 composer 小朋友装开发中版本也可以
然后再跑一次 composer require kachkaev/php-r
=======================================================================
[1] 细节请查询 __autoload() 跟 spl_autoload()
[2] 关于这两个东西...
PSR-0 http://blog.mosil.biz/2012/08/psr-0-autoloading-standard/
PSR-4 https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md
作者: aaa7513231 (浑沌与秩序)   2015-06-06 15:08:00
谢谢你的讲解~!!!,确实是照你得步骤做就可以解决引用的问题了,但很可惜的是该专案用于Windows上有问题持续奋斗中啊!QQ...

Links booklink

Contact Us: admin [ a t ] ucptt.com