草庐IT

php - 关于 PHP 中具有静态函数和命名空间的类的问题

我在工作中使用的是PHP5.2.14,因此我没有命名空间选项。我可以用静态函数代替类来命名空间吗?例如,我们周围有很多“方便”的功能,它们可以执行各种杂项,这些功能都集中在这个文件中,而且它们往往会变得困惑。我很乐意看到他们遵循某种组织逻辑。所以我的解决方案是...我只想创建名为“StringTools”或“DateTools”的类,每次我们需要使用这些函数时,我都会简单地调用SomethingTools::funciton_name(...)。这将是一个充满静态函数的简单类,带有一个空的构造函数,纯粹是为了命名空间和组织而创建的。它会很容易管理并且非常有条理,因为相关的功能将被组织到

php - 什么应该是 php 中类的实例?

在PHP5.2.x、mySQL5.x中我在思考什么应该和不应该是php类的实例时遇到了一些问题,因为一旦页面呈现,它们就不会持久存在。假设我有一个评论列表。对我来说,每个评论都是它自己的对象是有道理的,因为我可以对它们调用操作,并且它们拥有属性。如果我用另一种语言(具有持久状态并可以与之交互的语言)来执行此操作,我会那样做。但这似乎很浪费,因为这样做我有一个调用new()的循环,这可能意味着我需要为每个实例访问数据库(也很糟糕)。但也许我遗漏了什么。Php在我对类和对象的看法上似乎有所不同。什么时候应该是类实例,什么时候不是? 最佳答案

PHP:提供静态和非静态方法的类的设计模式

我的目标是创建可以同时使用static和non-static方式的类。两种方式都必须使用相同的方法,但方式不同非静态方式:$color=newColor("#fff");$darkenColor=$color->darken(0.1);静态方式:$darkenColor=Color::darken("#fff",0.1);因此在此示例中,darken方法既可用于现有对象,也可用作Color类的静态方法。但是根据它的使用方式,它使用不同的参数。应该如何设计这样的类?创建此类类的好的模式是什么?类会有很多不同的方法,因此应该避免在每个方法的开头进行大量检查代码。

PHP 类的私有(private)属性和方法

注意到一些关于PHP类的东西,我不知道它是否是一个错误或者它为什么起作用,这是代码:echoProp();}privatefunctionechoProp(){echo'Prophasvalue:'.$this->prop;}}$obj=newA;$obj->fun();结果不是我预期的错误,因为我正在调用私有(private)方法(在PHP5.3.10-1ubuntu3.7上使用Suhosin-Patch测试)。结果是“Prophasvalue:value” 最佳答案 在php文档中http://www.php.net/manua

.net - 从 PHP 调用 .NET 类的最佳方式?

将PHP应用程序连接到位于.NET库中的逻辑的最佳选择是什么?PHP从v5.0开始支持aDOTNETclass这应该让我从PHP脚本调用.NET逻辑。但似乎有很多问题-我无法让它可靠地工作,使用任意.NET类。该文档有点薄,是记录的内容并不正确。Internet上关于此类的问题很多,php.net上的错误报告也很多。我已经能够让PHP通过COM互操作与.NET连接——但这需要.NET类是ComVisible。据我所知,由于COM要求,这仅适用于Windows。我听说过Phalangerproject但不知道很多细节。它适用于任意PHP脚本吗?在Linux上工作?它对性能或运行时有很大的

Php调用变量中类的静态方法

我有一个命名空间App\Term,它被保存为一个属性:$this->name='App\Term'。如何调用此类的静态方法,例如$this->name::methodName()?或者这个问题有其他解决方案吗? 最佳答案 为此,您可以使用call_user_func。call_user_func($name.'::methodName');或者:call_user_func(array($name,'methodName')); 关于Php调用变量中类的静态方法,我们在StackOver

java - 创建类的异常安全包装器

我有一个遗留类C1,它实现了接口(interface)I,它可能会抛出一些异常。我想创建一个C2类,它也实现接口(interface)I,它基于C1的一个实例,但捕获所有异常并对它们做一些有用的事情。目前我的实现是这样的:classC2implementsI{C1base;@Overridevoidfunc1(){try{base.func1();}catch(Exceptione){doSomething(e);}}@Overridevoidfunc2(){try{base.func2();}catch(Exceptione){doSomething(e);}}...}(注意:我也可

java - @ContextConfiguration 中配置类的初始化顺序会受到影响吗?

我正在使用@ContextConfiguration注释来管理我的应用程序中的配置。创建配置以便它们仅提供由给定模块公开的beans。因此,给定模块使用的一些bean不一定直接导入。示例:configuration--(use)-->module1--(cannot@Import)-->database\-(use)-------------------------------->database换句话说,配置使用module1,它需要(但不能直接导入)数据库配置。因此,配置也使用了数据库模块。但是导入的解析顺序似乎是随机的。即使我用@ContextConfiguration(clas

java - Hibernate:没有实体类的外键,只能通过id

我有一个分层实体,它把自己作为父对象引用。我只需要通过ids进行映射,而不是通过实体实例(原因太复杂无法解释)。所以我这样定义实体:classItem{@IdprivateStringid;@ManyToOne(targetEntity=Item.class)@JoinColumn(name="PARENT_ID",nullable=true)privateStringparentId;}这似乎工作正常。外键约束在数据库中正确创建。但是当我执行以下查询时:SELECTiFROMItemiWHEREi.parentId=:parentId我得到这个异常(有趣的部分以粗体显示):org.h

匿名类的Java "method serialization"

假设我正在创建一个库,其中提供了一个优先级队列类。用户实例化一个并实现一个Comparator接口(interface),然后将该接口(interface)轻轻地传递到优先级队列。我想:1.允许用户轻松定义Comparator类-通过将其实现为匿名类,就像这个示例所建议的那样:PriorityQueuepq=newPriorityQueue();pq.setComparator(newComparator(){@Overridepublicintcompare(inti1,inti2){if(i1i2)return1;elsereturn0;}};);2.授予用户序列化和反序列化优先级