如果我有这个代码,则回显字符串"test".这是在PHP 5.3中.这是一些不应该依赖的疏忽,还是在PHP中实现多重继承的某种方式?
class Test1
{
function getName()
{
return $this->name;
}
}
class Test2
{
public $name = 'test';
function getName()
{
return Test1::getName();
}
}
$test = new Test2;
echo $test->getName();
Run Code Online (Sandbox Code Playgroud)
编辑:
正如已经指出GZipp的评论,这实际上是记录在案的行为.参见本页:http://us2.php.net/manual/en/language.oop5.basic.php和标题"Example#2 $ this伪变量的一些例子".
类A和B与我上面的两个测试类和行有类似的关系
$b = new B();
$b->bar();
Run Code Online (Sandbox Code Playgroud)
显示与我的示例相同或多或少的结果.
这不起作用:
interface TestInterface
{
public function testMethod();
}
interface TestInterface2
{
public function testMethod();
}
class TestClass implements TestInterface, TestInterface2
{
}
Run Code Online (Sandbox Code Playgroud)
给我错误:
致命错误:无法继承抽象函数TestInterface2 :: testMethod()(之前在TestInterface中声明为abstract).
那是对的吗?为什么不允许这样做?对我没有意义.
抽象函数也会发生这种情况,例如,如果您实现了一个接口,然后从具有相同名称的抽象函数的类继承.
我有一个名为test.php的命名空间文件,它带有一个函数和一个类:
namespace Test;
function testFunc(){}
class TestClass{}
Run Code Online (Sandbox Code Playgroud)
然后,如果在另一个文件中我"使用"这两个命名空间元素,则该类可以工作,但不能使用该函数:
use Test\testFunc,
Test\TestClass;
include "test.php";
new TestClass();
testFunc();
Run Code Online (Sandbox Code Playgroud)
TestClass对象创建正常,但我得到testFunc()的致命错误:
Fatal error: Call to undefined function testFunc()
Run Code Online (Sandbox Code Playgroud)
我认为命名空间支持函数.我究竟做错了什么?
编辑:这里的解释 - http://www.php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.nofuncconstantuse
我刚刚开始使用使用dotenv库的Laravel 5.这在项目的根目录中使用.env文件,该文件使用以下行设置环境:
APP_ENV=local
Run Code Online (Sandbox Code Playgroud)
根据我在这个主题上阅读的所有内容,所有其他环境特定的配置都应该放在这个文件中,所以数据库密码,网址等,然后读入主配置数组,如下所示:
env('DB_HOST', 'localhost')
Run Code Online (Sandbox Code Playgroud)
虽然我觉得这可能适用于您可能不想提交的一些特定的数据库密码,但我真正想要的是能够为每个环境提交大部分或全部不同的环境值.
因此我想要的是.env将APP_ENV定义为"本地","暂存"或"生产",然后有一个包含值的.local.env或.env.local文件,然后我可以提交这些文件和正确的文件将根据APP_ENV加载.
这可能吗?Laravel 4有级联配置数组,看起来更灵活但是如果我可以有一个环境.env文件,那么我可以忍受.
我正在使用这个npm库 - https://www.npmjs.com/package/googleapis,我使用以下Express路线/user/:
/* Redirect to the google login page */
router.get('/login', function (req, res) {
res.redirect(auth.generateUrl());
});
/* The callback from the google OAuth API call */
router.get('/callback', function (req, res) {
auth.authenticate(req.query.code);
res.send();
});
Run Code Online (Sandbox Code Playgroud)
auth是这个模块:
var oAuth2 = require('googleapis').auth.OAuth2;
var oauth2Client = new oAuth2([CLIENT_ID], [CLIENT_SECRET], [DOMAIN] + '/user/callback');
module.exports = {
/**
* Generate a url to redirect to for authenticating via Google
*
* @return {String}
*/
generateUrl: function () {
return oauth2Client.generateAuthUrl({
access_type: …Run Code Online (Sandbox Code Playgroud) 我用Google搜索的所有内容都表明你不应该对Eloquent进行单元测试,因为它已经在Laravel中进行了单元测试.
但是在这种情况下,我有另一个类,它不是一个Eloquent模型,但它确实将一个Eloquent模型记录插入到数据库中.我想对这门课进行单元测试.
例如:
public function methodIWantToTest()
{
$record = new User();
$user->name = 'Bob';
$user->email = 'bob@example.com';
$user->save();
}
Run Code Online (Sandbox Code Playgroud)
我该如何对这种方法进行单元测试?当我尝试它实际插入数据库.当然,我甚至无需靠近数据库就可以做到这一点?
调用setNoRender()或者实际上viewRenderer帮助器上的任何方法似乎都对控制器插件没有影响.
class TestPlugin extends Zend_Controller_Plugin_Abstract
{
public function postDispatch(Zend_Controller_Request_Abstract $request)
{
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->setNoRender();
}
}
Run Code Online (Sandbox Code Playgroud)
视图脚本仍然呈现.并且插件肯定在运行,因为我可以将回声放在这里并且它们将输出.
有点像这样来自WordPress: 
或者来自MediaWiki: 
我在PHP中尝试了几个差异引擎,最全面的似乎是(http://www.raymondhill.net/finediff/viewdiff-ex.php)和PEAR的Text_Diff,但我似乎无法找到任何选项两个版本并排堆叠,如上图所示.我认为这比将两个版本合二为一,更容易阅读.
我正在使用 Google Optimize 来创建 A/B 测试。我在服务器端模式下使用它,如本指南所示:https : //developers.google.com/optimize/devguides/experiments
该指南展示了一种简单的方法,通过在服务器上呈现设置实验 ID 和变体 ID 的 JS 代码来设置哪个实验与哪个变体一起运行:
// 2. Create a tracker.
ga('create', 'UA-XXXXX-Y', 'auto');
<?php
<<<HTML
// 3. Set the experiment ID and variation ID.
ga('set', 'exp', '$experimentId.$variationId');
HTML;
?>
// 4. Send a pageview hit to Google Analytics.
ga('send', 'pageview');
Run Code Online (Sandbox Code Playgroud)
但是,我正在使用 Google 标签管理器,到目前为止还没有找到任何说明如何使用它从服务器设置变量的指南。ga是一个未定义的变量,所以上面的方法不起作用。
Doctrine 2具有Doctrine\ORM\Tools\Pagination\Paginator类,可用于对常规DQL查询进行分页.
但是,如果我传递一个本机查询,我会收到此错误:
Catchable fatal error: Argument 1 passed to Doctrine\ORM\Tools\Pagination\Paginator::cloneQuery() must be an instance of Doctrine\ORM\Query, instance of Doctrine\ORM\NativeQuery given
Run Code Online (Sandbox Code Playgroud)
我尝试在cloneQuery方法中从paginator类中删除类型提示,但这只会产生更多错误,因为paginator类的其他位需要在Query中找到不在NativeQuery中的方法.
是否有任何简单的方法来分页本机查询,而无需构建新的paginator类或从数据库中获取每一行到数组?
php ×8
laravel ×2
oop ×2
diff ×1
doctrine-orm ×1
dql ×1
eloquent ×1
inheritance ×1
interface ×1
laravel-5 ×1
namespaces ×1
node.js ×1
oauth-2.0 ×1
pagination ×1
unit-testing ×1