public function validate() { $datatype = JsonUtil::getType($this->node); $schematype = $this->getType(); if ($datatype == 'array' && $schematype == 'object') { // PHP datatypes are kinda loose, so we'll fudge $datatype = 'object'; } if ($datatype == 'number' && $schematype == 'integer' && $this->node == (int) $this->node) { // Alright, it'll work as an int $datatype = 'integer'; } if ($datatype != $schematype) { if (is_null($datatype) && !is_object($this->parent)) { $msg = JsonUtil::uiMessage('jsonschema-invalidempty'); $e = new JsonSchemaException($msg); $e->subtype = "validate-fail-null"; throw $e; } else { $datatype = is_null($datatype) ? "null" : $datatype; $msg = JsonUtil::uiMessage('jsonschema-invalidnode', $schematype, $datatype, $this->getDataPathTitles()); $e = new JsonSchemaException($msg); $e->subtype = "validate-fail"; throw $e; } } switch ($schematype) { case 'object': $this->validateObjectChildren(); break; case 'array': $this->validateArrayChildren(); break; } return true; }