Php 为所有可用函数实例化一个对象
我的PHP文件中有很多函数 我需要实例化这个对象Php 为所有可用函数实例化一个对象,php,Php,我的PHP文件中有很多函数 我需要实例化这个对象$twitterObj=newepitwitter(TWITTER\u CONSUMER\u KEY,TWITTER\u CONSUMER\u SECRET)并使其可用于文件中的每个函数,我不想在每个函数上重复它 有办法吗?要实例化此对象而不必将其复制并粘贴到文件中的每个函数 谢谢通常认为最好的方法是将is作为参数传递给每个函数: function a(EpiTwitter $twitter) { } function b(EpiTwitter $
$twitterObj=newepitwitter(TWITTER\u CONSUMER\u KEY,TWITTER\u CONSUMER\u SECRET)
并使其可用于文件中的每个函数,我不想在每个函数上重复它
有办法吗?要实例化此对象而不必将其复制并粘贴到文件中的每个函数
谢谢通常认为最好的方法是将is作为参数传递给每个函数:
function a(EpiTwitter $twitter) { }
function b(EpiTwitter $twitter) { }
懒惰的方法(我建议不要这样做,除非它是一个不大可能增长的小脚本),就是在全局范围内创建它,然后使用global关键字将其拉入函数:
$twitter = ...;
function a() {
global $twitter;
//$twitter is now the twitter from above.
}
getTwitterObj()->doStuff();
function my_func () {
global $myGlobalObject;
// function code
}
一个简单的解决方案是使用关键字 一个更好的选择是注射
function myFunc(EpiTwitter $twitterObj)
{
$twitterObj->doStuff();
}
我总是使用注入。对象的实例保存在变量中,因此受PHP中任何其他变量的约束。有几种方法可以实现您想要做的事情,但您不能做到的是让每个函数“自动”使用它,而不需要修改函数
function myFunc(EpiTwitter $twitterObj)
{
$twitterObj->doStuff();
}
function getTwitterObj()
{
static $obj = null;
if ($obj == null) {
$obj = new EpiTwitter(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET);
}
return $obj;
}
您需要在全局范围内实例化对象,并以某种方式将其“导入”到函数的范围内。为此,您有三个选项:
数组(记录在上面的链接中)$GLOBALS
关键字(记录在上面的链接中)global
- 将对象作为
$twitterObj = new EpiTwitter(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET);
function my_func () {
$twitterObj = $GLOBALS['twitterOjb'];
// do stuff
}
备选案文2:
$twitterObj = new EpiTwitter(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET);
function my_func () {
global $twitterObj;
// do stuff
}
备选案文3:
$twitterObj = new EpiTwitter(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET);
function my_func ($twitterObj) {
// do stuff
}
my_func($twitterObj);
您可以将实例化包装到函数中,而不是使用
全局
function getTwitterObj()
{
static $obj = null;
if ($obj == null) {
$obj = new EpiTwitter(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET);
}
return $obj;
}
您甚至可以在功能中执行此操作:
$twitter = ...;
function a() {
global $twitter;
//$twitter is now the twitter from above.
}
getTwitterObj()->doStuff();
function my_func () {
global $myGlobalObject;
// function code
}
另外,如果您使用的是类,那么可以查看单例模式。
您可以在函数内将变量声明为全局变量:
$twitter = ...;
function a() {
global $twitter;
//$twitter is now the twitter from above.
}
getTwitterObj()->doStuff();
function my_func () {
global $myGlobalObject;
// function code
}
在该函数中,变量$myGlobalObject
是全局作用域中的变量:它将在函数返回后生效,可用于其他函数(如果它们声明了同名的全局
变量)和函数外的所有代码
function getTwitterObj()
{
static $obj = null;
if ($obj == null) {
$obj = new EpiTwitter(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET);
}
return $obj;
}
这实际上是一种不好的做法,你应该避免。相反,定义函数以接受一个参数,您每次都会传递该参数。您只需要实例化它一次。例如:
function my_func_a ( $myObj ) {
// function code
}
function my_func_b ( $myObj ) {
// function code
}
// the actual script...
$twitterObj = new EpiTwitter( TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET );
my_func_a( $twitterObj );
my_func_b( $twitterObj );
// etc...
如果确实需要,只在函数中使用全局变量。总是尽量避免它。从很多方面来说,这只是一个美化了的全球形象,尽管它确实解决了全球形象所带来的一些问题。(对于一个单身汉,我更倾向于成为一个荣耀的全球)。我知道这是一个老问题,但是你应该考虑接受一个答案。