Стрлен не работает должным образом

Я просто делаю опыт работы с некоторыми функциями PHP для управления некоторыми полями формы.

Я только что создал настоящую крошечную форму, чтобы увидеть, как может работать форма ООП, но я испытываю странное поведение команды strlen.

Вот код:

форма класса и его крошечный контроль

class Form {

public $nome = '';

public function __construct() {
    if(isset($_POST['nome'])){
    $this->nome = $_POST['nome'];
    }
}
public function body() {

    return "<form action=$_SERVER[PHP_SELF] method=post>
           <input type=text name=nome value=\"$this->nome\">
           <input type=submit value=INVIA><br>";
    }

  }

class check {

public $nome;

public function __construct() {
    $this->nome = $_POST['nome'];
}

public function controllo() {

    if ( !empty($this->nome) && strlen($this->nome >= 3) ) {
        echo "$this->nome è un nome valido";
        return TRUE;
    } else {
        return FALSE;
    }
}

}

Реализация PHP

<?php
    require '/classes/class.form';

    if(!isset($_POST['nome'])) {
     $form=new Form();
    echo $form->body();   
    } else {
        $check = new check();
        if (!$check->controllo()) {
            $form2=new Form();
            echo $form2->body();
            echo "c'è un errore nei controlli";

        } else {
            echo "tutto ok!";
        }

    }

    ?>

Как видите, проверка должна контролировать, будет ли длина входного текста>=3. Если ложь, форму снова распечатывают с содержанием и сообщают, что что-то не так, в противном случае он говорит, что это правильно.

Бывает, что если я пытаюсь использовать "1" и "2", элемент управления не пропускает его, но когда я пытаюсь использовать "3", кажется, что сценарий не соответствует длине ввода, но его типу и тому дает мне правильное соответствие, даже если длина одного символа.

Более того, если я попробую один алфавитный или число>3 буквенных символов, управление всегда ложно. В чем здесь может быть проблема?

1 ответ

Решение

Вы неправильно поставили заключительную скобку.strlen следует применять только к переменной $this->nome, не к вашему логическому выражению $this->nome >= 3,

Ваш оригинальный код: if (!empty($this->nome) && strlen($this->nome >= 3)) {

Что вы намеревались: if ( !empty($this->nome) && strlen($this->nome) >= 3 ) {

Другие вопросы по тегам