首先,我理解编程和对象,但以下对我来说在PHP中没有多大意义.
在PHP中,我们使用&运算符来检索对变量的引用.我理解一个引用是一种用不同变量引用相同"事物"的方法.如果我说的话
$b = 1;
$a =& $b;
$a = 3;
echo $b;
Run Code Online (Sandbox Code Playgroud)
将输出3,因为对$ a的更改与对$ b的更改相同.反过来:
$b = 1;
$a = $b;
$a = 3;
echo $b;
Run Code Online (Sandbox Code Playgroud)
应该输出1.
如果是这种情况,为什么需要克隆关键字?在我看来,如果我设置
$obj_a = $obj_b
然后对$ obj_a所做的更改不应该影响$ obj_b,相反,$ obj_a =&$ obj_b应该指向同一个对象,因此对$ obj_a所做的更改会影响$ obj_b.
然而,在PHP中,似乎$ obj_a DO上的某些操作会影响$ obj_b,即使在没有引用运算符的情况下进行了分配($obj_a = $obj_b)
.这对我今天在使用DateTime对象时造成了令人沮丧的问题,我最终基本上通过这样做来修复:
$obj_a = clone $obj_b
Run Code Online (Sandbox Code Playgroud)
但是我编写的大多数PHP代码似乎都不需要像这种情况那样的显式克隆,没有它就可以正常工作.这里发生了什么?为什么PHP必须如此笨重?
我有一个使用ArrayAdapter填充的字符串列表的android微调器,它运行正常,但是由于微调器的显示方式,我遇到列表项的显示高度问题.
乍一看似乎ArrayAdapter可以使用单一布局来显示导致我遇到的问题的选项.在微调器中显示当前项目时(当用户没有从列表中选择新项目时),微调器会填充文本,以便微调器的大小合理.然而,当用户点击它并调出列表以选择新项目时,所呈现的列表项目在高度方面是小的.如果我使用一个项目布局将列表项显示在合理的高度,那么由于它自己填充列表项,微调器本身变得过于庞大.
有关如何管理这两个项目显示模式高度的任何想法,以便有效地显示相同的高度值而不是微调器高度大于列表项目显示高度?
我有以下代码:
<?php echo strip_tags($firstArticle->introtext); ?>
Run Code Online (Sandbox Code Playgroud)
其中$ firstArticle是一个stdClass对象:
object(stdClass)[422]
public 'link' => string '/maps101/index.php?option=com_content&view=article&id=57:greenlands-newest-iceberg&catid=11:geography-in-the-news' (length=125)
public 'text' => string 'GREENLAND'S NEWEST ICEBERG' (length=26)
public 'introtext' => string '<p>A giant chunk of ice calved off the Petermann Glacier on
the northwest side of Greenland this summer. At nearly 100 square miles (260
sq. km) in size, four times the size of Manhattan, th' (length=206)
public 'date' =>
object(JDate)[423]
public '_date' => int 1284130800
public '_offset' => int 0
public '_errors' =>
array …
Run Code Online (Sandbox Code Playgroud) 我有一个网站,我在这里做一个像这样的ajax调用:
// perform an ajax request to generate a new subscriber account
jQuery.ajax({
type: 'POST',
url: '/index.php?option=com_content&view=article&id=45&tmpl=component',
data: postVars,
success: handleResponse,
error: function(jqXHR, textStatus, errorThrown) {
alert ('response: ' + jqXHR.responseText);
alert ('code: ' + jqXHR.getResponseHeader('X-Subscriber-Status'));
}
});
Run Code Online (Sandbox Code Playgroud)
被请求的页面没有做任何事情,只返回一位数的状态代码,它适用于除IE9之外的每个浏览器.该脚本与其请求的页面托管在同一个域中,因此跨域脚本编写不会出现任何问题.
我终于找到了正在发生的事情,但我不知道如何解决它.事实证明,Ajax请求成功完成,没有任何问题.我通过使用Fiddler来查看网络流量来验证这一点.服务器使用HTTP状态代码200响应请求,并且正文除了单个数字响应代码之外不包含任何内容.此时,jQuery执行错误处理程序,而不是预期的成功处理程序(在IE9中).为什么这样做,我该如何防止它?这只发生在IE9中.即使IE8和IE7使用完全相同的代码也能正常工作!正如您所看到的,我最终使用了检测IE9并使用XmlHttpRequest对象来执行此操作(顺便说一句,它工作正常).
这对我来说似乎是一个jQuery错误,但我在搜索中找不到它.我真的是唯一一个遇到这种奇怪行为的人吗?
我正在编写一个PHP脚本,用于将数据从Microsoft SQL Server 2008数据库导入MYSQL数据库.
MSSQL Server设置为"SQL_Latin1_General_CP1_CI_AS"的排序规则,并且有问题的数据存储在"nchar"类型的列中.
我的PHP网页使用
<meta http-equiv="content-type" content="text/html; charset=utf-8">
Run Code Online (Sandbox Code Playgroud)
表示它们应该以UTF-8字符编码显示.
我正在使用sqlsrv PHP扩展从MSSQL数据库中提取数据.
$sql = 'SELECT * FROM [tArticle] WHERE [ID] = 6429';
$stmt = &sqlsrv_query($dbHandler, $sql);
while ($row = sqlsrv_fetch_object($stmt)) {
// examples of what I've tried simply to display the data
echo $row->Text1;
echo utf8_encode($row->Text1);
echo iconv("ISO-8859-1", "UTF-8", $row->Text1);
echo iconv("ISO-8859-1", "UTF-8//TRANSLIT", $row->Text1);
}
Run Code Online (Sandbox Code Playgroud)
暂时忘记将数据插入MYSQL数据库.我无法在PHP页面中正确显示字符串.从我的列表中的示例:
echo $row->Text1
Run Code Online (Sandbox Code Playgroud)
由我的浏览器呈现为一个明显无效的字符:"Lucy s"
之后的所有示例都呈现为空白:"Lucys"
它看起来像是一个字符集不匹配的问题,但我怎样才能从MS SQL数据库中正确显示这些数据(不改变我的网页编码)?如果我能解决这个问题,我可能会把它存储在MYSQL数据库部分中.
我有一个Android活动,我正在使用标签.
public class UnitActivity extends TabActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.unit_view);
TabHost tabHost = getTabHost();
TabSpec spec;
spec = tabHost.newTabSpec("controls");
spec.setIndicator("Control");
spec.setContent(R.layout.unit_control);
tabHost.addTab(spec);
spec = tabHost.newTabSpec("data");
spec.setIndicator("Data");
spec.setContent(R.layout.unit_data);
tabHost.addTab(spec);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行该程序时,它崩溃并出现错误:"无法创建选项卡内容,因为找不到ID为2130903042的视图".我不明白是什么问题因为R.layout.unit_data引用了我资源目录中的布局文件(res/layout/unit_data.xml)
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TableLayout
android:stretchColumns="*"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Spinner android:id="@+id/unit_num"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:prompt="@string/choose_unit"/>
<TableRow android:padding="2dp">
<TextView
android:gravity="right"
android:padding="5dp"
android:text="@string/Power"/>
<TextView android:id="@+id/unit_power"
android:layout_span="3"
android:gravity="center"
android:padding="5dp"
android:background="@android:color/white"
android:textColor="@android:color/black"
android:text="AUTO"/>
</TableRow>
...
</TableLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
据我所知,unit_data.xml格式正确,我甚至在另一个活动中成功引用它
class UnitData extends Activity {
@Override
public void onCreate(Bundle …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个android程序,其中我有一个使用制表符的活动.
活动
public class UnitActivity extends TabActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TabHost tabHost = getTabHost();
TabSpec spec;
Resources res = getResources();
LayoutInflater.from(this).inflate(R.layout.unit_view, tabHost.getTabContentView(), true);
spec = tabHost.newTabSpec("controls");
spec.setIndicator("Control", res.getDrawable(R.drawable.ic_tab_equalizer));
spec.setContent(R.id.txtview);
tabHost.addTab(spec);
}
Run Code Online (Sandbox Code Playgroud)
}
R.layout.unit_view引用的XML
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
<TextView android:id="@+id/txtview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom"
android:text="nullpointer this!" />
</FrameLayout>
</LinearLayout>
</TabHost>
Run Code Online (Sandbox Code Playgroud)
据我所知,我正在做我在android sdk的tabs1 api示例中看到的相同内容.我尝试过"getLayoutInflator()"而不是"LayoutInflator.from(this)",结果相同.
如果我用"setContentView(R.layout.unit_view)"替换LayoutInflater行,我的程序不会因空指针异常而崩溃,但我的内容完全空白且为空.我得到了标签,就是这样.
我检查确保R.layout.unit_view和tabHost在运行LayoutInflater行时不为空,它们似乎没问题.他们肯定不是空的.我还检查过确保LayoutInflater.from(this)返回一个有效的布局inflater对象,它确实如此.
指示错误的logcat说
E/AndroidRuntime( 541): java.lang.NullPointerException E/AndroidRuntime( …
我有一个定义如下的递归函数
private function _buildPathwayRecurse(&$category, &$reversePathway = array()) {
$category->uri = FlexicontentHelperRoute::getCategoryRoute($category->id);
$reversePathway[] = $category;
if ($category->parent_id != 0) {
$category = $this->_getCatForPathway($category->parent_id);
$this->_buildPathwayRecurse($category, $reversePathway);
} else {
return $reversePathway;
}
}
Run Code Online (Sandbox Code Playgroud)
我这样称呼它
$reversePathway = $this->_buildPathwayRecurse($category);
Run Code Online (Sandbox Code Playgroud)
但是$ reversePathway最终为null.知道为什么会这样吗?我已经使用XDebug逐步完成了我的代码,据我所知,一切正常.当我到达线
return $reversePathway
Run Code Online (Sandbox Code Playgroud)
$ reversePathway看起来很完美.它持续通过函数调用并每次获得一个新项目.在执行返回线之前,它有一个像应该的一样的几个项目的数组,但到我出去的时候
$reversePathway = $this->_buildPathwayRecurse($category);
Run Code Online (Sandbox Code Playgroud)
它似乎只是消失了!