jjzjj

php - 了解 php 引用和静态

coder 2024-05-03 原文

我正在尝试了解 CodeIgniter 核心基础知识,例如加载类。我被困在了这里:

function &load_class($class, $directory = 'libraries', $prefix = 'CI_')
{
    static $_classes = array();

    // Does the class exist?  If so, we're done...
    if (isset($_classes[$class]))
    {
        return $_classes[$class];
    }
     ...
     ... // more code 
     ...
}

然后他们像这样加载类:

$BM =& load_class('Benchmark', 'core');

所以我理解的问题是为什么在函数名之前使用 &,为什么使用 static 以及为什么使用 ' =& '..我认为它们有一些共同点。 每次使用 load_class 函数时 $_classes 是否覆盖为空数组?

谢谢!

最佳答案

下面的函数

function &load_class($class, $directory = 'libraries', $prefix = 'CI_') { //... }

将返回一个引用而不是值。这意味着,当您像这样调用函数时

$BM =& load_class('Benchmark', 'core');

在这种情况下,$BM 将获得类 Benchmark 的引用。

检查 References Explained .

下面的变量

static $_classes = array();

只会被初始化一次,并且会在函数结束时保持它的状态,并且每当执行下次重新进入函数时,如果它看到变量 $_classes 已经被初始化,那么它不会' t 再次初始化它,如果它没有初始化,那么它会初始化它。当您需要在后续调用中保持变量的相同状态而不是全局变量时,这很有用。

检查 variable scope .

关于php - 了解 php 引用和静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19142763/

有关php - 了解 php 引用和静态的更多相关文章

  1. c# - 静态通用类作为字典 - 2

    泛型类中的静态字段对于泛型参数的每个组合都有一个单独的值。因此它可以用作Dictionarywhatever>这比静态Dictionarywhatever>好还是坏?换句话说,这些实现中哪个更有效?publicstaticclassMethodGen<TParam>{publicstaticreadonlyAction<TParam>Method=CreateMethod();staticAction<TParam>CreateMethod(){/*...*/}}或者,publicstaticclassMethodGen{staticreadonly

  2. c# - 处理 EF 中循环引用的干净方法? - 2

    假设我有这个表结构:Client-----------ClientIdintnotnull(identity)CurrentDemographicIdintnull(FKtoClientDemographic)OtherClientFieldsvarchar(100)nullClientDemographic------------------ClientDemographicIdintnotnull(identity)ClientIdintnotnull(FKtoClient)OtherClientDemographicFieldsvarchar(100)null想法是Client(

  3. c# - vs2010 beta 2 下的 CS0120 错误 - 需要对象引用 - 2

    以下代码在vs2008下可以正常工作:namespaceN2.Engine.Globalization{publicclassDictionaryScope:Scope{objectpreviousValue;publicDictionaryScope(IDictionarydictionary,objectkey,objectvalue):base(delegate{if(dictionary.Contains(key))previousValue=dictionary[key];dictionary[key]=value;},delegate{if(previousValue==n

  4. c# - 如何将 .xproj 引用到 .csproj 中? - 2

    我有.csproj项目,我想引用其他项目.xproj,一切看起来都很好,但是当我尝试构建解决方案时,我不能,因为.dll丢失。当我从\bin\release\net452\...本身引用.dll时,一切正常。如何解决?编辑:我不是在寻找解决方法-现在我正在使用gulp和gulp.move()。它工作正常,但感觉很脏...... 最佳答案 无法直接从csproj引用xproj。您有2种可能的解决方案。A)将xproj部署为NuGet包并在您的csproj中使用NuGet包。B)将您的csproj转换为xproj。注意:xproj必须支

  5. c# - 如何引用多版本程序集 - 2

    我正在开发一个Sharepoint应用程序并使用.NETAjaxControlToolkit库,我们正在向Sharepoint添加一个自定义的aspx页面。Sharepoint2007以怪癖模式运行,因此我对AJAX库进行了一些修改,使其表现正常。问题是,另一个团队已经在使用AJAX库,而且它与我的版本不同。这导致了冲突,因为bin文件夹中可能只有一个同名的dll。据我所知,.NET应该能够轻松处理这种情况。我试过使用强名称和GAC来解决它,但它仍然引用bin文件夹中的dll。如果bin文件夹中没有AjaxControlToolkit.dll,应用程序将无法加载程序集。如果我像这样使用

  6. c# - NuGet 包无法为 lib 目录中的 DLL 添加对项目的引用 - 2

    我正在尝试打包引用C++DLL的.NETDLL。nuspec文件如下所示:<?xmlversion="1.0"?><package><metadata><id>MyPackage</id><version>1.0.0</version><authors>someauthor</authors><owners>someowner</owners><requireLicenseAcceptance>false</require

  7. c# - 为什么 System.Array 的大多数方法都是静态的? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我想这更像是一个框架设计问题。我最近想知道为什么System.Array中的大多数方法都是静态的。我的直觉react总是使用例如Array实例上的IndexOf(object),而不是System.Array.IndexOf(array,object)。决定是否将方法设为静态是否有一个主要原则?我发现了这个问题:WhenisitbesttouseStati

  8. c# - 公共(public)构造函数和静态构造函数 - 2

    我正在阅读使用两个构造函数的C#代码。一个是静态的,另一个是公共(public)的。这两个构造函数有什么区别?为什么我们必须使用静态构造函数? 最佳答案 static和public是正交的概念(即它们彼此没有任何关系)。public只是意味着该类的用户可以调用该构造函数(相对于private)。static表示方法(在本例中为构造函数)不属于类的实例,而是属于“类本身”。特别是,当类第一次被使用时,静态构造函数被一次自动调用。此外,不能将静态构造函数设为public或private,因为它不能手动调用;它仅由.NET运行时本身调用—

  9. c# - 找不到类型或命名空间(是否缺少 using 指令或程序集引用?) - 2

    当我尝试编译我的C#程序时出现以下错误:找不到类型或命名空间名称“Login”(是否缺少using指令或程序集引用?)usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceFootballLeague{publicpartialclassMainMenu:Form{FootballLeagu

  10. c# - 如何引用C :\Users\Public directory programmatically in C# - 2

    通过以下方式以编程方式引用公用文件夹是否安全:Directory=System.Environment.GetEnvironmentVariable("public")+"MyCompanyName"//etc.或者有更好的方法吗?同样,如果有人删除了public的环境变量怎么办,这对于不同语言的操作系统是否安全?接下来是:HowtoinstalltothePublicdirectoryinWindows7fromtheVS2010deploymentSetupProject 最佳答案 这似乎有点问题

随机推荐

  1. c# - null 和 datetime 之间没有隐式转换 - 2

    这个问题在这里已经有了答案:ConditionaloperatorassignmentwithNullable<value>types?(6个答案)关闭9年前。以下代码从给定的DataRow(modelValue)读取一段数据并将其解析为nullableDateTime实例。问题:请参阅L1和L2下的代码部分,两者在技术上是相等的(如果我没有犯任何小学生错误)。但是,L1按预期工作,但不是L2。我得到了thereisnoimplicitconversionbetweennullanddatetime当我执行L2下的代码时。有人可以给我建议吗?DateTime?CallBac

  2. c# - 如何在不在 wpf 中引入新引用的情况下从 View 模型 (.cs) 调用窗口 (.xaml.cs) 中的方法 - 2

    我正在寻找一种在我的主窗口中调用方法的简单方法,但我想从我的View模型中调用它。基本上,我正在寻找某种“this.parent”之王,将其放入View模型中以引用主窗口。或者,如果您想了解我想要这样做的原因并告诉我另一种解决问题的方法:我正在使用一个不断获取信息的应用程序。在View模型中,信息被处理。我想在每次有满足某种条件的信息进来时发出通知。最初,我在View模型中有一个字典,用于存储有关该信息的信息,我在MainWindow中访问该字典,以便我可以使窗口闪烁并发送其他通知。但是当我在MainWindow中访问它时,我遇到了viewmodel的字典不断变化的问题。如果这个问题听

  3. c# - 如何将 System.IO.Stream 转换为图像? - 2

    如何将图像的Stream(我使用MediaLibrary中的Album.GetArt方法检索)转换为可用的图像Image在我的应用程序中? 最佳答案 简单...varimg=Bitmap.FromStream(stream); 关于c#-如何将System.IO.Stream转换为图像?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/18134234/

  4. c# - 用一个衬里替换c#中字符串中的多个字符 - 2

    我想知道是否可以替换字符串中的多个字符(例如,&、|和$字符)而不必多次使用.Replace()?目前我正在使用它作为returninputData.Replace('$','').Replace('|','').Replace('&','');但这太糟糕了,我想知道是否有类似的小而有效的替代方案。编辑:感谢大家的回答,不幸的是我没有upvote人所需的15个声誉 最佳答案 您可以使用Regex.Replace:stringout

  5. c# - 在单个事务中发送多个 SQL 命令 - 2

    我有一个巨大的INSERTINTO...字符串列表。目前我运行它们:using(SqlConnectionconnection=newSqlConnection(connectionString)){connection.Open();foreach(varcommandStringinsqlCommandList){SqlCommandcommand=newSqlCommand(commandString,connection);command.ExecuteNonQuery();}}我看到每个ExecuteNonQuery()也执行提交。有没有办法在单个事务中插入所有行(最后提交)

  6. c# - 异步方法是什么意思? - 2

    什么是异步方法。我想我知道,但我一直将它与并行性混淆。我不确定异步方法和并行性之间的区别是什么。还有使用线程类和异步类的区别是什么?编辑一些演示异步、线程和并行之间区别的代码会很有用。 最佳答案 什么是异步方法?当我们谈论可能冗长的操作时,就会讨论异步方法。通常我们需要完成这样的操作才能有意义地继续执行程序,但我们不想“暂停”直到操作完成(因为暂停可能意味着例如UI停止响应,这显然是不可取的)。异步方法是我们调用以开始冗长操作的方法。该方法应该执行启动操作所需的操作并“非常快速”地返回,这样就没有处理延迟。异步方法通常会返回一个to

  7. c# - 每当在 wpf 中滚动任何一个时,两个 ScrollViewer 的同步滚动 - 2

    我已经完成了线程:bindingtwoVerticalScrollBarsonetoanother它几乎帮助实现了目标,但仍然缺少一些东西。左右移动滚动条或上下移动滚动条会在我的两个滚动查看器中产生预期的滚动行为,但是当我们尝试使用/单击滚动查看器中这些滚动条末端的箭头按钮进行滚动时,只有一个滚动查看器被滚动,而不是预期的行为。那么我们还需要添加/编辑什么来解决这个问题? 最佳答案 一种方法是使用ScrollChanged事件来更新另一个ScrollViewer<ScrollViewerName="sv1"He

  8. c# - 如何单击 Web 浏览器控件中的按钮? - 2

    例如,在没有用户输入的情况下使用代码,我如何让我的程序点击google上的“搜索”按钮(假设我已经填写了搜索框并且在google.com) 最佳答案 webBrowser1.Navigate("http://www.google.com");如果您有ID,请使用:webBrowser1.Document.GetElementById("id").InvokeMember("click");如果你有TagName使用这个webBrowser1.Navigate("http://w

  9. c# - 仅使用扩展方法在 Linq 中进行漂亮、干净的交叉连接 - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Nested“from”LINQqueryexpressedwithextensionmethods我确定之前有人问过这个问题,但老实说我找不到任何东西。我很好奇以下仅使用内置Linq扩展方法的等效语法是什么:varz1=fromxinxsfromyinysselectnew{x,y};我可以得到相同的结果:varz2=xs.SelectMany(x=>ys.Select(y=>new{x,y}));但是会产生不同的IL代码,而且代码有点绕口难懂。有没有更简洁的方法来使用扩展方法来做到这一点?这是

  10. C#,结构与类,更快? - 2

    这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:WhichisbestfordatastoreStruct/Classes?考虑我有一个Employee对象的示例,该对象具有年龄、姓名、性别、职务、薪水等属性。我现在有一个列表,我想用一堆Employees填充(每个Employee实例都是唯一的)。就速度和内存占用而言,将员工创建为Struct还是类更可取?欢迎就上述场景中的Struct与Class提出任何额外的警告