在PHP中,可以使用变量变量......
例如...
class obj { }
$fieldName = "Surname";
$object = new obj();
$object->Name = "John";
$object->$fieldName = "Doe";
echo "{$object->Name} {$object->Surname}"; // This echoes "John Doe".
Run Code Online (Sandbox Code Playgroud)
但是,$ fieldName字符串可能包含变量名称中不允许的某些字符.PHP仍然会创建具有该名称的字段(很像关联数组),但我无法使用$ object - > ......访问它,因为它无法正确解析.
现在,是否有任何函数可以检查字符串是否可以用作有效的PHP变量名.如果没有,如何使用正则表达式创建它?PHP中的变量名称有哪些规则?

我在查询这个问题时遇到了问题(我是LINQ的新手,请原谅我),我花了几个小时在网上搜索.在SQL中我只想这样做
SELECT c.Forname, c.Surname cg.Title, g.GroupName
FROM Contact c
inner join ContactGroup cg on cg.ContactID = c.ID
inner join Group g on cg.GroupNameID = g.ID
WHERE g.ID=1;
Run Code Online (Sandbox Code Playgroud)
我曾经尝试过,但失败了,因为:
var result =
from c in cc.Contacts
from cg in c.ContactGroups
from g in cg.Group
where g.ID==1
select new
{
c.Forename,
c.Surname,
cg.Title,
g.GroupName
};
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我我做错了什么或指导我到某个地方获取更多信息吗?
非常感谢.
背景:
实体框架4,带有SQL Server 2008
问题:
我有一张桌子Order.每行都有一列Timestamp.
用户可以选择过去的一些时间,我需要获得Order最接近指定时间的时间,但这是在指定时间之前发生的.换句话说,指定时间之前的最后一个订单.
例如,如果我有订单
2008-01-12
2009-04-17
2009-09-24
2010-11-02
2010-12-01
2011-05-16
Run Code Online (Sandbox Code Playgroud)
并选择一个日期2010-07-22,我应该得到2009-09-24 order,因为这是指定日期之前的最后一个订单.
var query = (from oData in db.OrderDatas
where oData.Timestamp <= userTime
orderby oData.Timestamp ascending
select oData).Last();
Run Code Online (Sandbox Code Playgroud)
这与我正在尝试的最接近.但是,我不确定Last运算符在转换为SQL时是如何工作的,如果它完全被翻译的话.
题:
此查询是获取所有数据(早于userTime),然后获取最后一个元素,还是将其翻译,以便只从数据库返回一个元素?我的表可以容纳非常多的行(100000+),因此性能是一个问题.
另外,如何检索数据库中最接近的时间(不一定是更早的时间)?在一个例子中2010-07-22,人们会得到2010-11-02,因为它更接近指定的日期2009-09-24.
这是自解释代码(执行十亿次操作):
int k = 0;
Stopwatch sw = new Stopwatch();
sw.Start();
for (int a = 0; a < 1000; a++)
for (int b = 0; b < 1000; b++)
for (int c = 0; c < 1000; c++)
k++;
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw = new Stopwatch();
sw.Start();
for (int a = 0; a < 1000; a++)
for (int b = 0; b < 1000; b++)
for (int c = 0; c < 1000; c++)
; // NO-OP
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Run Code Online (Sandbox Code Playgroud)
结果是(至少在我的电脑上)某处(以毫秒为单位)
2168 …Run Code Online (Sandbox Code Playgroud) 如何检查列表框的垂直滚动条是否在代码隐藏中可见?
我有一个带有x:Name ="listOfItems"的列表框,其底层ScrollViewer的VerticalScrollbarVisibility设置为auto.
设置ListBox的ItemsSource属性后,我想检查verticalScrollbar是否可见,但我不知道要检查哪个属性或如何深入列表框的scrollviewer元素.
有什么建议
我读过 Tcp Echo 服务器的示例,但有些事情我不清楚。
TcpClient client = null;
NetworkStream netStream = null;
try {
client = listener.AcceptTcpClient();
netStream = client.GetStream();
int totalBytesEchoed = 0;
while ((bytesRcvd = netStream.Read(rcvBuffer, 0, rcvBuffer.Length)) > 0) {
netStream.Write(rcvBuffer, 0, bytesRcvd);
totalBytesEchoed += bytesRcvd;
}
netStream.Close();
client.Close();
} catch {
netStream.Close();
}
Run Code Online (Sandbox Code Playgroud)
当服务器收到数据包(while 循环)时,他将数据读入 rcvBuffer 并将其写入流。
让我困惑的是通信中消息的时间顺序。使用 netStream.Write() 写入的数据是立即发送到客户端(甚至可能仍在发送),还是仅在已写入流(由客户端)处理的数据之后发送。
下面的问题甚至可以澄清前面的问题:如果客户端通过写入流来发送一些数据,那么该数据是否会移动到服务器端的消息队列中等待读取,因此流实际上是“空”?这可以解释为什么服务器可以立即写入流 - 因为来自流的数据实际上在其他地方缓冲......?
我正在尝试使用TcpClient.BeginConnect / TcpClient.EndConnect组合连接到我的服务器.但是,有些东西不能正常工作.
方案如下:
TcpClient.BeginConnectclient.Close()在关闭套接字的过程中调用,然后停止异步操作)TcpClient连接回调方法发生了IAsyncResultTcpClient.EndConnect用给定的方法调用方法IAsyncResultNullReferenceException发生在EndConnect(?)BeginConnect操作完成之前(这很奇怪,因为已经调用了回调).
这里发生的事情NullReferenceException就是抓住了.从上图中可以看出,既不是client也不ar是null.问题是EndConnect的MSDN文档没有提到抛出此异常的情况.
所以基本上,我不知道发生了什么.问题是我被迫等待应用程序关闭(好像连接操作仍然等待超时).如果服务器在线,它连接和断开就好了.
是什么 NullReferenceException 在这方面的意思?BeginConnect如果无法建立连接,如何避免操作阻止应用程序关闭?
附加说明(评论中要求):
以下是创建客户端的代码(客户端是成员变量:
public void Connect()
{
try
{
lock (connectionAccess)
{
if (State.IsConnectable())
{
// Create a client …Run Code Online (Sandbox Code Playgroud) 我正在第一次尝试在应用程序中使用线程,但在我尝试实例化我的线程的行上,我得到错误'方法名称预期'.这是我的代码:
private static List<Field.Info> FromDatabase(this Int32 _campId)
{
List<Field.Info> lstFields = new List<Field.Info>();
Field.List.Response response = new Field.List.Ticket
{
campId = _campId
}.Commit();
if (response.status == Field.List.Status.success)
{
lstFields = response.fields;
lock (campIdLock)
{
loadedCampIds.Add(_campId);
}
}
if (response.status == Field.List.Status.retry)
{
Thread th1 = new Thread(new ThreadStart(FromDatabase(_campId)));
th1.Start();
}
return lstFields;
}
Run Code Online (Sandbox Code Playgroud) 情况:
我有一个UserControl像这样的"包装器面板" (为简洁起见,删除了名称空间和视觉细节):
<UserControl ...>
<Grid x:Name="LayoutRoot" Background="White">
<ContentPresenter x:Name="integratedPanelContent" Margin="5" />
</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
然后在Code-behind中我注册了一个依赖属性
public FrameworkElement PanelContent
{
get { return (FrameworkElement)GetValue(PanelContentProperty); }
set { SetValue(PanelContentProperty, value); }
}
public static readonly DependencyProperty PanelContentProperty =
DependencyProperty.Register("PanelContent", typeof(FrameworkElement), typeof(MyWrapperPanel),
new PropertyMetadata(null, OnPanelContentChanged));
private static void OnPanelContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((MyWrapperPanel)d).OnSetContentChanged(e);
}
protected virtual void OnSetContentChanged(DependencyPropertyChangedEventArgs e)
{
if (PanelContent != null)
integratedPanelContent.Content = PanelContent;
}
Run Code Online (Sandbox Code Playgroud)
现在我可以将任何内容包装到我的控件中:
<my:MyWrapperPanel x:Name="myWrap">
<my:MyWrapperPanel.PanelContent>
<TextBlock x:Name="tbxNothing" Text="Nothing" />
</my:MyWrapperPanel.PanelContent>
</my:MyWrapperPanel>
Run Code Online (Sandbox Code Playgroud)
问题描述:
每当我尝试在代码隐藏中使用引用tbxNothing时,系统抛出, …
框架:Silverlight 4 + Entity Framework 4(SL业务应用程序:解决方案中的SL项目和.WEB项目)
我的数据层中有两个类(未映射到DB,手动创建 - 我需要它们用于特定视图)
[EnableClientAccess]
public class CityInfoFull
{
[Key]
public int Id { get; set; }
public String Country{ get; set; }
public String Region { get; set; }
public String City { get; set; }
public int Population { get; set; }
public DateTime Founded { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
RIA在Geography.Web.g.cs中生成适当的代理类
在同一个命名空间中,我有另一个类:
[EnableClientAccess]
public class Person
{
[Key]
public int Id { get; set; }
public String FullName { get; set; }
public …Run Code Online (Sandbox Code Playgroud) c# code-generation entity-framework-4 silverlight-4.0 wcf-ria-services
c# ×7
code-behind ×2
.net ×1
asynchronous ×1
connection ×1
increment ×1
linq ×1
listbox ×1
names ×1
netstream ×1
object ×1
packet ×1
performance ×1
php ×1
scrollbar ×1
select ×1
silverlight ×1
sockets ×1
tcpclient ×1
tcplistener ×1
variables ×1
visibility ×1
wpf ×1
wrapper ×1