PHP истинное и 'истинное' различие

OK. У меня есть ответ сейчас. Проблема в том, что .setSelectionFromTop () будет работать только в том случае, если представление списка было в верхнем макете (то есть не вложено). После некоторого расчесывания головы я понял, что могу сделать свой макет RelativeLayout и получить тот же внешний вид, но без необходимости вложения макетов для флажка и списка. Это новый макет:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/recordViewLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <CheckBox android:id="@+id/checkBoxTop"
            android:text="Check All"
            android:layout_width="160dp"
            android:layout_height="wrap_content"/>"


        <ListView android:id="@+id/engNameList"
            android:layout_width="160dp"
            android:layout_height="wrap_content"
            android:layout_below="@+id/checkBoxTop"/>       





        <HorizontalScrollView  
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/checkBoxTop">

            <LinearLayout android:id="@+id/scroll"  
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <include layout="@layout/record_view_line" android:id="@+id/titleLine" />

                <ListView 
                    android:id="@android:id/list"
                    android:layout_height="wrap_content"
                    android:layout_width="match_parent"/>

            </LinearLayout>

        </HorizontalScrollView>
    </RelativeLayout>

Это в основном код, который идет с макетом.

В onCreate ()

    engListView=getListView();
    engListView.setOnTouchListener(this);


    recordListView=(ListView)findViewById(R.id.recordList);
    recordListView.setOnScrollListener(this);

и методах прослушивания:

public boolean onTouch(View arg0, MotionEvent event) {
    recordListView.dispatchTouchEvent(event);

    return false;
}


public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    View v=view.getChildAt(0);
    if(v != null)
        engListView.setSelectionFromTop(firstVisibleItem, v.getTop());
}
5
задан asdfasdfasdfasdf 15 June 2009 в 19:17
поделиться

5 ответов

Любая непустая строка оценивается как истинная, а пустая строка оценивается как ложная. Следующий сценарий может пролить свет на вас:

<?php
if('true' == true) {
  echo "'true' == true";
} else {
  echo "'true' != true";
}

echo '<br />';

if('false' == true) {
  echo "'false' == true";
} else {
  echo "'false' != true";
}

echo '<br />';

if('foo' == true) {
  echo "'foo' == true";
} else {
  echo "'foo' != true";
}

echo '<br />';

if('false' == false) {
  echo "'false' == false";
} else {
  echo "'false' != false";
}

echo '<br />';

if('' == true) {
  echo "'' == true";
} else {
  echo "'' != true";
}

echo '<br />';

if('' == false) {
  echo "'' == false";
} else {
  echo "'' != false";
}

?>

Вот результат:

'true' == true
'false' == true
'foo' == true
'false' != false
'' != true
'' == false

По запросу, вот еще несколько примеров сравнения == с === для различных значений.

<?php
echo "<b>'true' vs. true</b><br />";

if('true' == true) {
  echo "'true' == true<br />";
} else {
  echo "'true' != true<br />";
}

if('true' === true) {
  echo "'true' === true<br />";
} else {
  echo "'true' !== true<br />";
}

echo "<br /><b>'false' vs. true</b><br />";

if('false' == true) {
  echo "'false' == true<br />";
} else {
  echo "'false' != true<br />";
}

if('false' === true) {
  echo "'false' === true<br />";
} else {
  echo "'false' !== true<br />";
}

echo "<br /><b>1 vs. true</b><br />";

if(1 == true) {
  echo "1 == true<br />";
} else {
  echo "1 != true<br />";
}

if(1 === true) {
  echo "1 === true<br />";
} else {
  echo "1 !== true<br />";
}

echo "<br /><b>0 vs. false</b><br />";

if(0 == false) {
  echo "0 == false<br />";
} else {
  echo "0 != false<br />";
}

if(0 === false) {
  echo "0 === false<br />";
} else {
  echo "0 !== false<br />";
}

echo "<br /><b>1 vs. 'true'</b><br />";

if(1 == 'true') {
  echo "1 == 'true'<br />";
} else {
  echo "1 != 'true'<br />";
}

if(1 === 'true') {
  echo "1 === 'true'<br />";
} else {
  echo "1 !== 'true'<br />";
}

echo "<br /><b>empty string '' vs. false</b><br />";

if('' == false) {
  echo "'' == false<br />";
} else {
  echo "'' != false<br />";
}

if('' === true) {
  echo "'' === false<br />";
} else {
  echo "'' !== false<br />";
}

?>

Вывод:

'true 'vs. истина

'true' == true
'true' !== true

' false 'vs. true

'false' == true
'false' !== true

1 vs. true

1 == true
1 !== true

0 vs. false

0 == false
0 !== false

1 vs.' true '

1 != 'true'
1 !== 'true'

пустая строка' 'vs. false

'' == false
'' !== false
13
ответ дан 18 December 2019 в 09:09
поделиться

Я всегда стараюсь использовать более строгие === или ! == , когда мне абсолютно необходим логический ответ, поэтому:

$success = 'true';
if( $success === 'false'){
...
}

На всякий случай.

1
ответ дан 18 December 2019 в 09:09
поделиться

Сначала логическое значение. 2-я строка

Вы можете увидеть их различие в этом.

$success = 'true';
$success2 = true;

var_dump($success);
var_dump($success2);

А также проверьте результат этого

var_dump($success == $success2);
var_dump($success === $success2);

Вам также следует изучить эту таблицу сравнения типов. Настоящая полезная информация, которая поможет вам немного лучше понять PHP.

4
ответ дан 18 December 2019 в 09:09
поделиться

true - это логическое значение, true - это строка.

0
ответ дан 18 December 2019 в 09:09
поделиться

Да, разница есть. Каждое значение переменной PHP (или почти любого языка программирования) имеет «тип». При создании / присвоении значения в кавычках

$foo = 'true';

вы создаете значение, тип которого является строкой, а при создании / присвоении значения без кавычек вы создаете переменную с логическим типом

$bar = true;

Как и некоторые другие современные, В динамических языках PHP очень старается организовать вещи таким образом, чтобы вам не приходилось беспокоиться о таких вещах, как тип. Например, многие языки НЕ позволяют сравнивать равенство двух переменных, если они не одного типа, поэтому что-то вроде

if('true' == True) ... 

не является допустимым кодом в python (вы получите исключение). PHP, с другой стороны, старается быть хорошим и (за кулисами) говорит: «Что ж, если вы используете любую строку в операции равенства, мы» пытаясь упростить общий случай (давайте преобразуем переменные для людей), они усложнили некоторые менее распространенные случаи, что может привести к тому, что баги будет сложно отслеживать. Все становится по-настоящему ужасно, когда одни люди в вашей команде понимают закулисное принуждение, а другие - нет.

Итак, по большому счету, всегда лучше возвращать явные логические значения (без кавычек) из методов и функций, возвращающих успех. Опытные программисты ожидают этого, а неопытные программисты будут сбиты с толку некоторыми ошибками, которые всплывают, когда вместо них используются строки.

по большому счету, всегда лучше возвращать явные логические значения (без кавычек) из методов и функций, возвращающих успех. Опытные программисты ожидают этого, а неопытные программисты будут сбиты с толку некоторыми ошибками, которые всплывают, когда вместо них используются строки.

по большому счету, всегда лучше возвращать явные логические значения (без кавычек) из методов и функций, возвращающих успех. Опытные программисты ожидают этого, а неопытные программисты будут сбиты с толку некоторыми ошибками, которые всплывают, когда вместо них используются строки.

0
ответ дан 18 December 2019 в 09:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: