我在一个我没有设置的系统上继承了一些代码,我遇到了一个跟踪PHP包含路径设置的问题.
我有一个php.ini文件,其中包含以下include_path
include_path = ".:/usr/local/lib/php"
Run Code Online (Sandbox Code Playgroud)
我在webroot中有一个名为test.php的PHP文件,其中包含以下phpinfo调用
<?php
phpinfo();
Run Code Online (Sandbox Code Playgroud)
当我查看phpinfo调用时,将覆盖include_path的本地值
Local Value Master Value
include_path .;C:\Program Files\Apache Software Foundation\ .:/usr/local/lib/php
Apache2.2\pdc_forecasting\classes
Run Code Online (Sandbox Code Playgroud)
此外,php.ini文件表明没有加载其他.ini文件
Configuration File (php.ini) Path /usr/local/lib
Loaded Configuration File /usr/local/lib/php.ini
Scan this dir for additional .ini files (none)
additional .ini files parsed (none)
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是,标准PHP系统中的其他内容(包括一些PEAR库)可能会覆盖php.ini和正在解释/执行的实际php代码之间的include_path.
我需要获取某个属性集的属性组,我该怎么做?
我想我得到了属性组ID,但我似乎无法获得该组的属性.
$attributes = $_product->getAttributes();
foreach($attributes as $attribute)
{
$group_id = $attribute->getData('attribute_set_info/' . $_product->getAttributeSetId() . '/group_id');
print_r($group_id);
}
Run Code Online (Sandbox Code Playgroud)
我真的很感激,如果有人可以帮助我,thanx;)
我有一个命令行脚本,它array()通过循环运行一个文件,并使用文件名作为参数来调用辅助对象上的方法.
每次运行脚本时,PHP memory_get_usage报告的数字越来越大
53294264
57019624
61374624
65699176
70230600
75157152
79900392
84630472
89359264
94300016
100031176
105202448
110360808
115777528
121146976
126784824
132366952
Run Code Online (Sandbox Code Playgroud)
直到我出错了
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted
Run Code Online (Sandbox Code Playgroud)
很明显,某些东西正在泄漏内存,或某种全局/静态存储区域不断被添加.在PHP中调试此类错误的最佳方法是什么?有没有在PHP中无意中发生这种情况的常见情况?xDebug有一些神奇的选项可以帮助我查明这一点吗?其他工具?
我提出的最好的方法是跟随执行链并通过调用memory_get_usage()来乱丢代码库,直到找到确切的问题,但这似乎是一种单调乏味且低效的方法.
Magento使用工厂模式来实例化类中的对象
$model = Mage::getModel('catalog/product'); //Mage_Catalog_Model_Product by default
$helper = Mage::helper('catalog/data'); //Mage_Catalog_Helper_Data by default
Run Code Online (Sandbox Code Playgroud)
这些字符串将扩展为类名,并且可以将System配置为替换默认值.
这些字符串被称为或应该被称为什么? 我一直在滥用术语URI(有时用"URI-like"这句话来缓和滥用),但这不是真的."类名"似乎也不正确,因为它很容易引起混淆(你是在谈论工厂类名,还是实际的PHP类名?)
任何人都对此有权威吗?
在Drupal 7(和Drupal 6?)系统中,什么"开始"钩子调用过程,或"顶级"钩子调用位于何处?
正如我目前了解Drupal模块系统,任何模块都能够为另一个模块创建一个钩子来实现.这意味着Drupal的大部分执行都是为其他模块实现钩子的模块,这反过来又为其他模块提供了钩子来实现.
我不清楚的是,是否有一个初始的顶级钩子在引导程序中调用以启动此过程,或者是否有几个非模块调用启动钩子调用过程,或其他什么(道歉)这是模糊和新的,但就像我说我不明白)
我查看了这个_drupal_bootstrap_full功能,最后有一个很有希望
module_invoke_all('init');
Run Code Online (Sandbox Code Playgroud)
但是,我对该modules/文件夹的搜索只显示了一个"init"钩子函数,这似乎不是一个启动点
system/system.api.php
1737:function hook_init() {
function hook_init() {
drupal_add_css(drupal_get_path('module', 'book') . '/book.css');
}
Run Code Online (Sandbox Code Playgroud)
所以,这对我说模块系统之外的东西踢掉了这一切.这是发生在一个地方,还是多个地方.这些地方在哪里?
我目前不是一个沉重的Drupal用户.我所有这一切的最终目标是孤立地理解Drupal的模块系统,这样我就可以调查并理解Drupal如何使用它的模块构建大多数人认为是Drupal的应用程序.欢迎任何/所有解释,但我试图从架构的角度理解事物.我知道你不需要这些知识来使用Drupal,但是我的大脑已经坏了,在我知道基本的PHP代码在做什么之前我不会让我前进.
许多PHP系统将实现对象类型(例如模型),允许客户端程序员在他们自己的类中定义类似这样的方法
class Car extends Model
{
public function _afterSave()
{
//do something every-time this model is saved
}
}
Run Code Online (Sandbox Code Playgroud)
在文档和教程中,这种模式通常作为"观察者/监听者"模式引入.
但是,虽然您可以将这些方法描述为侦听父类的操作,但这似乎与传统的OOP 观察者模式非常不同.
是否存在允许客户端程序员定义这些前/后方法的模式的正式名称,或者这只是早期PHP开发人员在语言开发其类似OOP的java/C#之前开辟的东西?
我刚开始使用Laravel 5,但我还是无法显示经典的Hello页面; 我只看到我的应用程序文件列表.
我试图改变我的.htaccess文件,清除我的缓存,创建一个新的应用程序,但无济于事.我知道PHP在我的服务器上运行良好,只有这一个Laravel应用程序似乎无法处理它.这似乎我错过了一些显而易见的事情,但我不知道应该知道我应该问什么.
这是一个截图,以展示我所看到的:
这是我用来创建应用程序的命令
$ laravel new m6g
Run Code Online (Sandbox Code Playgroud)
我正在使用股票apache2在Mac上工作(未设置为mamp)
laravel 集合方法(或 PHP 数组方法)是否有办法移出集合的第一个键/值对?
也就是说,如果我有下面的小程序
$collection = collect(['key1'=>'value1','key2'=>'value2']);
var_dump(
$collection->first()
);
var_dump(
$collection->shift()
);
Run Code Online (Sandbox Code Playgroud)
我可以shift() value1关闭集合的开头,或者抓住它而不通过将其删除first()。我想要的是用一行代码来关闭或获取第一个值(即)的键的方法key1。我知道我可以做这样的事情
$result = (function($c){
foreach($c as $key=>$value)
{
return $key;
}
})($collection);
Run Code Online (Sandbox Code Playgroud)
但我希望/想知道 Laravel 是否有更优雅/紧凑的东西。
假设:在 go 中,所有函数参数都是按值传递的。为了获得按引用传递的语义/性能,go 程序员通过指针传递值。Go 仍然会复制这些参数,但它会复制一个指针,有时比复制实际参数的内存效率更高。
问题:当你传递一个接口时发生了什么?即,在这样的程序中
package main
import "fmt"
type Messages struct {
hello string
}
func main() {
sayHelloOne(Messages{"hello world"});
sayHelloTwo(&Messages{"hello world"});
sayHelloThree(Messages{"hello world"});
}
//go makes a copy of the struct
func sayHelloOne(messages Messages) {
fmt.Println(messages.hello)
}
//go makes a *pointer* to the struct
func sayHelloTwo(messages *Messages) {
fmt.Println(messages.hello)
}
//go --- ???
func sayHelloThree(messages interface{}) {
fmt.Println(messages.(Messages).hello)
}
Run Code Online (Sandbox Code Playgroud)
当程序员调用该函数时,参数会发生什么情况sayHelloThree?被messages抄袭了吗?或者它是一个指向messages被复制的指针?还是有一些对我来说很奇怪的推迟到messages演员阵容出现?
我正在尝试将psalm 静态分析工具用于 PHP。我的理解是该工具可以告诉我代码库中未使用的方法。但是,如果我创建一个简单的测试文件
#File: src/test.php
<?php
class A {
private function foo() : void {}
}
new A();
Run Code Online (Sandbox Code Playgroud)
然后运行 psalm
$ ./vendor/bin/psalm --find-dead-code src/test.php
Scanning files...
Analyzing files...
------------------------------
No errors found!
------------------------------
Checks took 0.16 seconds and used 32.694MB of memory
Psalm was able to infer types for 100% of the codebase
Run Code Online (Sandbox Code Playgroud)
或psalter,
$ ./vendor/bin/psalter --find-unused-code --dry-run --issues=UnusedMethod src/test.php
Scanning files...
Analyzing files...
------------------------------
No errors found!
------------------------------
Checks took 0.05 seconds and …Run Code Online (Sandbox Code Playgroud) php ×9
apache ×2
laravel ×2
magento ×2
.htaccess ×1
collections ×1
drupal ×1
drupal-hooks ×1
go ×1
include ×1
memory ×1
memory-leaks ×1
orm ×1
performance ×1
psalm-php ×1
xdebug ×1